home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / ab3rolling_demo < prev    next >
Text File  |  1997-01-31  |  83KB  |  5,709 lines

  1.  
  2.  
  3. maxscrdiv EQU 8
  4. max3ddiv EQU 5
  5. playerheight EQU 12*1024
  6. scrheight EQU 80
  7.  
  8. xpos EQU 0    ;l
  9. zpos EQU 4    ;l
  10. zsinval EQU 8    ;w
  11. zcosval EQU 10    ;w
  12. ztox EQU 12    ;l
  13. xsinval EQU 16    ;w
  14. xcosval EQU 18    ;w
  15. xspd EQU 20    ;w
  16. zspd EQU 22    ;w
  17. mapx EQU 24    ;b
  18. mapz EQU 25    ;b
  19. whichtile EQU 26 ;b
  20. xofflight EQU 28    ;w
  21. zofflight EQU 30    ;w
  22. offlight EQU 32        ;w
  23. zlinestore EQU 34
  24. zlinedir EQU 38
  25. zposdir EQU 40
  26. zposstore EQU 42
  27. xdiststore EQU 44
  28. xdistdir EQU 46
  29. zwallfound EQU 48
  30.  
  31. xlinestore EQU 50
  32. xlinedir EQU 54
  33. xposdir EQU 56
  34. xposstore EQU 58
  35. zdiststore EQU 60
  36. zdistdir EQU 62
  37. xwallfound EQU 64
  38.  
  39.  
  40. midoffset EQU 104*4*40
  41.  
  42.  SECTION Scrn,CODE
  43.  
  44. OpenLib         equ -552
  45. CloseLib        equ -414
  46.  
  47. vhposr        equ $006    
  48. vhposrl        equ $007 
  49. bltcon0        equ $40 
  50. bltcon1        equ $42
  51. bltcpt        equ $48
  52. bltbpt        equ $4c
  53. bltapt        equ $50
  54. spr0ctl        equ $142
  55. spr1ctl        equ $14a
  56. spr2ctl        equ $152
  57. spr3ctl        equ $15a
  58. spr4ctl        equ $162
  59. spr5ctl        equ $16a
  60. spr6ctl        equ $172
  61. spr7ctl        equ $17a
  62. spr0pos        equ $140
  63. spr1pos        equ $148
  64. spr2pos        equ $150
  65. spr3pos        equ $158
  66. spr4pos        equ $160
  67. spr5pos        equ $168
  68. spr6pos        equ $170
  69. spr7pos        equ $178
  70. bltdpt         equ $54
  71. bltafwm        equ $44
  72. bltalwm        equ $46
  73. bltsize         equ $58
  74. bltcmod         equ $60
  75. bltbmod         equ $62
  76. bltamod         equ $64
  77. bltdmod         equ $66
  78. diwstart        equ $8e         ; Screen hardware registers.
  79. diwstop         equ $90
  80. ddfstart        equ $92
  81. ddfstop         equ $94
  82. bplcon0         equ $100
  83. bplcon1         equ $102
  84. col0            equ $180
  85. col1            equ $182
  86. col2        equ $184
  87. col3        equ $186
  88. col4        equ $188
  89. col5        equ $18a
  90. col6        equ $18c
  91. col7        equ $18e
  92. col8            equ $190
  93. col9            equ $192
  94. col10           equ $194
  95. dmacon        equ $96
  96. dmaconr        equ $002
  97. intenar        equ $01c
  98. intena        equ $09a
  99. intreq        equ $09c
  100. intreqr        equ $01e
  101. intreqrl    equ $01f
  102. bpl1pth         equ $e0
  103. bpl1ptl         equ $e2
  104. bpl2pth        equ $e4
  105. bpl2ptl        equ $e6
  106. bpl3pth        equ $e8
  107. bpl3ptl        equ $ea
  108. bpl4pth        equ $ec
  109. bpl4ptl        equ $ee
  110. bpl5pth        equ $f0
  111. bpl5ptl        equ $f2
  112. bpl6pth        equ $f4
  113. bpl6ptl        equ $f6
  114. bpl7pth        equ $f8
  115. bpl7ptl        equ $fa
  116. spr0pth        equ $120
  117. spr0ptl        equ $122
  118. spr1pth        equ $124
  119. spr1ptl        equ $126
  120. spr2pth        equ $128
  121. spr2ptl        equ $12a
  122. spr3pth        equ $12c
  123. spr3ptl        equ $12e
  124. spr4pth        equ $130
  125. spr4ptl        equ $132
  126. spr5pth        equ $134
  127. spr5ptl        equ $136
  128. spr6pth        equ $138
  129. spr6ptl        equ $13a
  130. spr7pth        equ $13c
  131. spr7ptl        equ $13e
  132.  
  133.  
  134. ** This waits for the blitter to finish before allowing program
  135. ** execution to continue.
  136.  
  137. WB MACRO
  138. \@bf:
  139.  btst #6,dmaconr(a6)
  140.  bne.s \@bf
  141.  ENDM
  142.  
  143. *Another version for when d6 <> dff000
  144.  
  145. WBSLOW MACRO
  146. \@bf:
  147.  btst #6,$dff000+dmaconr
  148.  bne.s \@bf
  149.  ENDM
  150.  
  151.  
  152. **
  153.  
  154.  include "macros.i"
  155.  include "ab3:source/defs.i"
  156.  
  157.  move.w (a0)+,option
  158.  move.w (a0)+,option+2
  159.  move.l #'st4k',option
  160.  
  161.  jmp stuff
  162. endstuff:
  163.  
  164.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  165.  move.w #$87c0,dmacon(a6)
  166.  move.w #$8020,dmacon(a6)
  167.  move.w intenar(a6),saveinters
  168.  move.w #$7fff,intena(a6)
  169.  move.w #$00ff,$dff09e
  170.  
  171. *** Put myself in supervisor mode
  172.  
  173.  move.l #blag,$80
  174.  trap #0
  175. ; move.l $6c,d0
  176. ; move.l #blag,$6c
  177. ; move.w #$8010,intreq(a6)
  178.  
  179.  rts
  180.  
  181. saveit: ds.l 10
  182.  
  183.  
  184. blag:
  185. ; move.w #$10,intreq(a6)
  186. ; move.l d0,$6c
  187. ; move.w #$7fff,intena(a6)
  188.  
  189.  move.w #$20,$dff1dc
  190.  
  191.  move.l $6c,saveit
  192.  move.l #Chan0inter,$6c
  193.  jsr KInt_Init
  194.  
  195.  cmp.b #'k',option+3
  196.  bne.s nkb
  197.  st PLR1KEYS
  198.  clr.b PLR1PATH
  199.  clr.b PLR1MOUSE
  200. nkb:
  201.  cmp.b #'m',option+3
  202.  bne.s nmc
  203.  clr.b PLR1KEYS
  204.  clr.b PLR1PATH
  205.  st PLR1MOUSE
  206. nmc:
  207.  cmp.b #'p',option+3
  208.  bne.s nfp
  209.  clr.b PLR1KEYS
  210.  st.b PLR1PATH
  211.  clr.b PLR1MOUSE
  212. nfp:
  213.  
  214.  move.l #empty,pos1
  215.  move.l #empty,pos2
  216.  move.l #emptyend,Samp0end
  217.  move.l #emptyend,Samp1end
  218.  
  219.  move.l #nullspr,d0
  220.  move.w d0,s0l
  221.  move.w d0,s1l
  222.  move.w d0,s2l
  223.  move.w d0,s3l
  224.  move.w d0,s4l
  225.  move.w d0,s5l
  226.  move.w d0,s6l
  227.  move.w d0,s7l
  228.  move.w d0,bs0l
  229.  move.w d0,bs1l
  230.  move.w d0,bs2l
  231.  move.w d0,bs3l
  232.  move.w d0,bs4l
  233.  move.w d0,bs5l
  234.  move.w d0,bs6l
  235.  move.w d0,bs7l
  236.  swap d0
  237.  move.w d0,s0h
  238.  move.w d0,s1h
  239.  move.w d0,s2h
  240.  move.w d0,s3h
  241.  move.w d0,s4h
  242.  move.w d0,s5h
  243.  move.w d0,s6h
  244.  move.w d0,s7h 
  245.  move.w d0,bs0h
  246.  move.w d0,bs1h
  247.  move.w d0,bs2h
  248.  move.w d0,bs3h
  249.  move.w d0,bs4h
  250.  move.w d0,bs5h
  251.  move.w d0,bs6h
  252.  move.w d0,bs7h 
  253.  
  254.  move.l #Panel,d0
  255.  move.w d0,p1l
  256.  swap d0
  257.  move.w d0,p1h
  258.  move.l #Panel+80*24,d0
  259.  move.w d0,p2l
  260.  swap d0
  261.  move.w d0,p2h
  262.  move.l #Panel+80*24*2,d0
  263.  move.w d0,p3l
  264.  swap d0
  265.  move.w d0,p3h
  266.  move.l #Panel+80*24*3,d0
  267.  move.w d0,p4l
  268.  swap d0
  269.  move.w d0,p4h
  270.  move.l #Panel+80*24*4,d0
  271.  move.w d0,p5l
  272.  swap d0
  273.  move.w d0,p5h
  274.  
  275. *******************************
  276. * TIMER SCREEN SETUP
  277.  move.l #TimerScr,d0
  278.  move.w d0,p1l
  279.  swap d0
  280.  move.w d0,p1h
  281.  move.w #$1201,Panelcon
  282.  
  283. ; move.l #borders,d0
  284. ; move.w d0,s0l
  285. ; swap d0
  286. ; move.w d0,s0h
  287. ; move.l #borders+2064,d0
  288. ; move.w d0,s1l
  289. ; swap d0
  290. ; move.w d0,s1h
  291. ; move.l #borders+2064*2,d0
  292. ; move.w d0,s2l
  293. ; swap d0
  294. ; move.w d0,s2h
  295. ; move.l #borders+2064*3,d0
  296. ; move.w d0,s3l
  297. ; swap d0
  298. ; move.w d0,s3h
  299.  
  300.  move.w #42*256+80,borders
  301.  move.w #42*256+2,borders+4
  302.  move.w #42*256+80,borders+2064
  303.  move.w #42*256+130,borders+4+2064
  304.  move.w #42*256+192,borders+2064*2
  305.  move.w #42*256+2,borders+4+2064*2
  306.  move.w #42*256+192,borders+2064*3
  307.  move.w #42*256+130,borders+4+2064*3
  308.  
  309.  move.l #FacePlace,d0
  310.  move.w d0,f1l
  311.  swap d0
  312.  move.w d0,f1h
  313.  move.l #FacePlace+32*24,d0
  314.  move.w d0,f2l
  315.  swap d0
  316.  move.w d0,f2h
  317.  move.l #FacePlace+32*24*2,d0
  318.  move.w d0,f3l
  319.  swap d0
  320.  move.w d0,f3h
  321.  move.l #FacePlace+32*24*3,d0
  322.  move.w d0,f4l
  323.  swap d0
  324.  move.w d0,f4h
  325.  move.l #FacePlace+32*24*4,d0
  326.  move.w d0,f5l
  327.  swap d0
  328.  move.w d0,f5h
  329.  
  330.  move.l #BlurbPic,d0
  331.  move.w d0,bl1l
  332.  swap d0
  333.  move.w d0,bl1h
  334.  
  335. ; move.l #PanelCop,d0
  336. ; move.w d0,pcl1
  337. ; move.w d0,pcl2
  338. ; swap d0
  339. ; move.w d0,pch1
  340. ; move.w d0,pch2
  341.  
  342.  move.l #bigfield,d0
  343.  move.w d0,ocl
  344.  swap d0
  345.  move.w d0,och
  346.  
  347.  bset.b #1,$bfe001
  348.  
  349.  move.w #0,blcols+6
  350.  move.w #0,blcols+18
  351.  move.l #Blurbfield,$dff080    ; Point the copper at our copperlist.
  352.  move.l #$dff000,a6    ; a6 points at the first custom chip register.
  353.  move.w #$00ff,$dff09e
  354.  
  355.  move.l #$1000000,ededed
  356.  move.l #$1000000,ededed2
  357.  move.l #$fffffffe,ededed+4
  358.  move.l #$fffffffe,ededed2+4
  359.  
  360.  move.w #0,d0
  361.  
  362.  move.l #scrn,d0
  363.  move.w d0,pl1l
  364.  swap d0
  365.  move.w d0,pl1h
  366.  
  367.  move.l #scrn+40,d0
  368.  move.w d0,pl2l
  369.  swap d0
  370.  move.w d0,pl2h
  371.  
  372.  move.l #scrn+80,d0
  373.  move.w d0,pl3l
  374.  swap d0
  375.  move.w d0,pl3h
  376.  
  377.  move.l #scrn+120,d0
  378.  move.w d0,pl4l
  379.  swap d0
  380.  move.w d0,pl4h
  381.  
  382.  move.l #scrn+160,d0
  383.  move.w d0,pl5l
  384.  swap d0
  385.  move.w d0,pl5h
  386.  
  387.  move.l #scrn+200,d0
  388.  move.w d0,pl6l
  389.  swap d0
  390.  move.w d0,pl6h
  391.  
  392.  move.l #scrn+240,d0
  393.  move.w d0,pl7l
  394.  swap d0
  395.  move.w d0,pl7h
  396.  
  397.  move.l #colbars,a0
  398.  move.l #colbars2,a2
  399.  move.w #scrheight-1,d0
  400.  move.l #0,d6
  401.  move.w #1,d3
  402.  move.w #$2bdf,startwait
  403.  move.w #$2d01,endwait
  404. fillcop
  405.  move.w #$180,d1
  406.  
  407.  move.l a0,a1
  408.  move.l a2,a3
  409.  move.w #$10c,(a1)+
  410.  move.w #$10c,(a3)+
  411.  move.w d3,(a1)+
  412.  move.w d3,(a3)+
  413.  eor.w #$8000,d3
  414.  
  415.  move.w #$106,(a1)+
  416.  move.w #$106,(a3)+
  417.  move.w #$2c42,d5
  418.  or.w d3,d5
  419.  and.w #$fffe,d5
  420.  move.w d5,(a1)+
  421.  move.w d5,(a3)+
  422.  bsr do32
  423.  
  424.  move.w #$106,(a1)+
  425.  move.w #$106,(a3)+
  426.  move.w #$4c42,d5
  427.  or.w d3,d5
  428.  and.w #$fffe,d5
  429.  move.w d5,(a1)+
  430.  move.w d5,(a3)+
  431.  bsr do32
  432.  
  433.  move.w #$106,(a1)+
  434.  move.w #$106,(a3)+
  435.  move.w #$6c42,d5
  436.  or.w d3,d5
  437.  and.w #$fffe,d5
  438.  move.w d5,(a1)+
  439.  move.w d5,(a3)+
  440.  bsr do32
  441.  
  442. **********************************
  443.  
  444. ; cmp.b #'s',option
  445. ; beq.s smallscrn
  446.  
  447.  move.w startwait,(a1)+
  448.  move.w #$fffe,(a1)+
  449.  move.w endwait,(a1)+
  450.  move.w #$ff00,(a1)+
  451.  move.w startwait,(a3)+
  452.  move.w #$fffe,(a3)+
  453.  move.w endwait,(a3)+
  454.  move.w #$ff00,(a3)+
  455.  move.l #$1fe0000,(a1)+
  456.  move.l #$1fe0000,(a1)+
  457.  move.l #$1fe0000,(a3)+
  458.  move.l #$1fe0000,(a3)+
  459.  
  460.  add.w #$300,startwait
  461.  add.w #$300,endwait
  462.  
  463. smallscrn: 
  464. **********************************
  465.  
  466.  adda.w #104*4,a0
  467.  adda.w #104*4,a2
  468.  
  469.  dbra d0,fillcop
  470.  
  471. **********************************
  472. ; cmp.b #'s',option
  473. ; beq smallnotlarge
  474.  move.w #$38,fetchstart
  475.  move.w #$b8,fetchstop
  476.  move.w #$2c81,winstart
  477.  move.w #$2cc1,winstop
  478.  move.w #-40,modulo
  479.  move.w #-40,modulo+4
  480.  
  481.  move.l #scrn+40,a0
  482.  move.l #scrn+160,a1
  483.  move.l #scrn+280,a2
  484.  move.l #scrntab,a3
  485.  move.w #319,d7    ; counter
  486.  move.w #0,d1    ; xpos
  487. plotscrnloop:
  488.  move.b (a3)+,d0
  489.  move.w d1,d2
  490.  asr.w #3,d2
  491.  move.b d1,d3
  492.  not.b d3
  493.  bclr.b d3,-40(a0,d2.w)
  494.  bclr.b d3,(a0,d2.w)
  495.  bclr.b d3,40(a0,d2.w)
  496.  bclr.b d3,-40(a1,d2.w)
  497.  bclr.b d3,(a1,d2.w)
  498.  bclr.b d3,40(a1,d2.w)
  499.  bclr.b d3,-40(a2,d2.w)
  500.  btst #0,d0
  501.  beq.s nobp1
  502.  bset.b d3,-40(a0,d2.w)
  503. nobp1:
  504.  btst #1,d0
  505.  beq.s nobp2
  506.  bset.b d3,(a0,d2.w)
  507. nobp2:
  508.  btst #2,d0
  509.  beq.s nobp3
  510.  bset.b d3,40(a0,d2.w)
  511. nobp3:
  512.  btst #3,d0
  513.  beq.s nobp4
  514.  bset.b d3,-40(a1,d2.w)
  515. nobp4:
  516.  btst #4,d0
  517.  beq.s nobp5
  518.  bset.b d3,(a1,d2.w)
  519. nobp5:
  520.  btst #5,d0
  521.  beq.s nobp6
  522.  bset.b d3,40(a1,d2.w)
  523. nobp6:
  524.  btst #6,d0
  525.  beq.s nobp7
  526.  bset.b d3,-40(a2,d2.w)
  527. nobp7:
  528.  
  529.  addq #1,d1
  530.  
  531.  dbra d7,plotscrnloop
  532.  
  533. smallnotlarge:
  534.  
  535. **********************************
  536.  
  537. ****************************
  538.  jsr INITPLAYER
  539. ; bsr initobjpos
  540. ****************************
  541.  
  542.  move.l #null,$dff0a0
  543.  move.w #100,$dff0a4
  544.  move.w #443,$dff0a6
  545.  move.w #63,$dff0a8
  546.  
  547.  move.l #null2,$dff0b0
  548.  move.w #100,$dff0b4
  549.  move.w #443,$dff0b6
  550.  move.w #63,$dff0b8
  551.  
  552.  move.l #null4,$dff0c0
  553.  move.w #100,$dff0c4
  554.  move.w #443,$dff0c6
  555.  move.w #63,$dff0c8
  556.  
  557.  move.l #null3,$dff0d0
  558.  move.w #100,$dff0d4
  559.  move.w #443,$dff0d6
  560.  move.w #63,$dff0d8
  561.  
  562.  move.l #tab,a1
  563.  move.w #64,d7
  564.  move.w #0,d6
  565. outerlop
  566.  move.l #pretab,a0
  567.  move.w #255,d5
  568. scaledownlop:
  569.  move.b (a0)+,d0
  570.  ext.w d0
  571.  ext.l d0
  572.  muls d6,d0
  573.  asr.l #6,d0
  574.  move.b d0,(a1)+
  575.  dbra d5,scaledownlop
  576.  addq #1,d6
  577.  dbra d7,outerlop
  578.  
  579.  move.l #$dff000,a6
  580.  
  581.  move.w #$c018,intena(a6)
  582.  
  583.  move.w #$f,dmacon(a6)
  584.  move.w #$820f,dmacon(a6)
  585.  
  586.  bsr FullEnergy
  587.  move.b #1,PLR1_GunDamage
  588.  move.b #1,PLR2_GunDamage
  589.  move.w #3,PLR1_GunNoise
  590.  move.w #3,PLR2_GunNoise
  591.  
  592. ; move.w #$20,$1dc(a6)
  593.  
  594.  move.l #RecordBuffer+6,RecordPtr
  595.  move.w #0,FrameNum
  596.  
  597.  move.l #Blurbfield,$dff080
  598.  move.w #50,d0
  599.  bsr pause
  600.  
  601.  move.l #TEXTBLOCK,TextPtr
  602.  
  603.  move.w #$0,$dff034
  604.  jsr BLURB
  605.  
  606.  
  607. lop: 
  608.  
  609.  move.l #$dff000,a6
  610.  
  611.  move.l drawpt,d0
  612.  move.l olddrawpt,drawpt
  613.  move.l d0,olddrawpt
  614.  move.l d0,$dff084
  615.  move.l drawpt,a3
  616.  adda.w #10,a3
  617.  move.l a3,frompt
  618.  add.l #104*4*40,a3
  619.  move.l a3,midpt
  620.  move.l #bigfield,$dff080
  621.  
  622. waitfortop:
  623.  btst.b #0,intreqrl(a6)
  624.  beq waitfortop
  625.  move.w #$1,intreq(a6)
  626.  
  627.  move.l waterpt,a0
  628.  move.l (a0)+,watertouse
  629.  cmp.l #endwaterlist,a0
  630.  blt.s okwat
  631.  move.l #waterlist,a0
  632. okwat:
  633.  move.l a0,waterpt
  634.  
  635.  add.w #640,wtan
  636.  and.w #8191,wtan
  637.  add.w #1,wateroff
  638.  and.w #63,wateroff
  639.  
  640.  move.w FramesToDraw,TempFrames
  641.  move.w #0,FramesToDraw
  642.  
  643.  JSR INITTIMER
  644.  
  645. ; bsr PLR1_Control
  646.  
  647.  
  648. ; bsr PLR2_Control 
  649.  
  650.  
  651.  bsr PLAYBACKTIME
  652.  move.l #PLAYBACKTIME,a0
  653.  cmp.l #1024*1024*2,a0
  654.  bgt.s onlyonce
  655.  bsr PLAYBACKTIME
  656. onlyonce
  657.  
  658. ******************************************
  659.  jsr objmoveanim
  660.  bsr PlaceFace
  661.  bsr EnergyBar
  662.  clr.b PLR1_clicked
  663.  clr.b PLR2_clicked
  664. ******************************************
  665.  
  666.  move.l #ObjectPoints,a1
  667.  move.l #PLR1_Obj,a0
  668.  move.b damagetaken(a0),d2
  669.  beq notbeenshot
  670.  ext.w d2
  671.  sub.w d2,Energy
  672.  move.b #0,damagetaken(a0)
  673.  move.l #Cheese,FacesPtr
  674.  move.w #3,Cheese
  675.  move.w #-1,FacesCounter
  676. notbeenshot:
  677.  move.b Energy+1,numlives(a0)
  678.  
  679.  move.w (a0),d0
  680.  move.l PLR1_xoff,(a1,d0.w*8)
  681.  move.l PLR1_zoff,4(a1,d0.w*8)
  682.  move.l PLR1_Roompt,a1
  683.  move.w (a1),12(a0)
  684.  move.l PLR1_yoff,d0
  685.  add.l #playerheight+128*24,d0
  686.  asr.l #7,d0
  687.  move.w d0,4(a0)
  688.  
  689.  move.l #ObjectPoints,a1
  690.  move.l #PLR2_Obj,a0
  691.  move.w (a0),d0
  692.  move.l PLR2_xoff,(a1,d0.w*8)
  693.  move.l PLR2_zoff,4(a1,d0.w*8)
  694.  move.l PLR2_Roompt,a1
  695. ************************
  696.  move.w #-1,12(a0)
  697.  move.w 10(a1),2(a0)
  698. ************************
  699.  move.l PLR2_yoff,d0
  700.  add.l #playerheight+128*24,d0
  701.  asr.l #7,d0
  702.  move.w d0,4(a0)
  703.  
  704.  
  705.  move.w #0,scaleval
  706.  
  707.  
  708. * Subroom loop
  709.  
  710.  move.l PLR1_xoff,xoff
  711.  move.l PLR1_yoff,yoff
  712.  move.l PLR1_zoff,zoff
  713.  move.w PLR1_angpos,angpos
  714.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  715.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  716.  move.l PLR1_Roompt,Roompt
  717.  
  718.  move.w #0,leftclip
  719.  move.w #96,rightclip
  720.  move.w #0,deftopclip
  721.  move.w #79,defbotclip
  722. ; sub.l #10*104*4,frompt
  723. ; sub.l #10*104*4,midpt
  724.  
  725.  bsr DrawDisplay
  726.  
  727.  
  728.  tst.b PLR2
  729.  beq.s nodrawp2
  730.  
  731.  
  732.  move.l PLR2_xoff,xoff
  733.  move.l PLR2_yoff,yoff
  734.  move.l PLR2_zoff,zoff
  735.  move.w PLR2_angpos,angpos
  736.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  737.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  738.  
  739.  move.w #0,leftclip
  740.  move.w #96,rightclip
  741.  move.w #10,deftopclip
  742.  move.w #69,defbotclip
  743.  add.l #68*104*4,frompt
  744.  add.l #68*104*4,midpt
  745.  
  746.  bsr DrawDisplay
  747.  
  748.  
  749. nodrawp2:
  750.  
  751. ; move.l #brightentab,a0
  752. ; move.l frompt,a3
  753. ; adda.w #(4*33)+(104*4*20),a3
  754. ; move.w #20,d7
  755. ; move.w #20,d6
  756. ;horl:
  757. ; move.w d6,d5
  758. ; move.l a3,a1
  759. ;vertl
  760. ; move.w (a1),d0
  761. ; move.w (a0,d0.w*2),(a1)
  762. ; addq #4,a1
  763. ; dbra d5,vertl
  764. ; adda.w #104*4,a3
  765. ; dbra d7,horl
  766.  
  767.  move.l #$dff000,a6
  768.  
  769. ; move.w #$300,col0(a6)
  770.  
  771.  
  772.  btst #7,$bfe001
  773.  bne.s noend
  774. waitrel
  775.  btst #6,$bfe001
  776.  beq.s waitrel
  777.  bra end
  778. noend:
  779.  
  780.  tst.w Energy
  781.  ble end
  782.  
  783.  JSR STOPTIMER
  784.  
  785.  bra lop
  786.  
  787. PLAYBACKTIME
  788.  
  789.  move.l RecordPtr,a0
  790.  move.l StartRecordPtr,a6
  791.  move.l a0,d0
  792.  sub.l a6,d0
  793.  cmp.l (a6),d0
  794.  blt.s notbacktostart 
  795.  move.w #0,FrameNum
  796.  movem.l d0-d7/a0-a6,-(a7)
  797.  jsr BLURB
  798.  movem.l (a7)+,d0-d7/a0-a6
  799.  move.l RecordPtr,a0
  800.  
  801. notbacktostart:
  802.  move.w (a0)+,PLR1_xoff
  803.  move.w (a0)+,d0
  804.  ext.l d0
  805.  asl.l #7,d0
  806.  move.l d0,PLR1_yoff
  807.  move.w (a0)+,PLR1_zoff
  808.  moveq #0,d0
  809.  move.b (a0)+,d0
  810.  move.l #ZoneAdds,a1
  811.  move.l (a1,d0.w*4),a1
  812.  move.l a1,PLR1_Roompt
  813.  move.l 22(a1),PLR1_PointsToRotatePtr
  814.  add.l #26,a1
  815.  move.l a1,PLR1_ListOfGraphRooms
  816.  move.b (a0)+,d0
  817.  move.w (a0)+,PLR1_angpos
  818.  
  819.  move.l #PlayerShotData,a1
  820.  move.l #ObjectPoints,a2
  821.  move.w #4,d0
  822. PlayShots:
  823.  move.w (a1),d1
  824.  move.w (a0)+,(a2,d1*8)
  825.  move.w (a0)+,4(a2,d1*8)
  826.  move.w (a0)+,4(a1)
  827.  move.w (a0)+,12(a1)
  828.  move.l (a0)+,8(a1)
  829.  move.w #-1,16(a1)
  830.  adda.w #32,a1
  831.  dbra d0,PlayShots
  832.  
  833.  move.l #liftheighttab,a1
  834. playlifts:
  835.  move.w (a0)+,d0
  836.  cmp.w #999,d0
  837.  beq.s outoflifts
  838.  move.w d0,(a1)+
  839.  bra.s playlifts
  840. outoflifts:
  841.  
  842.  move.l #doorheighttab,a1
  843. playdoors:
  844.  move.w (a0)+,d0
  845.  cmp.w #999,d0
  846.  beq.s outofdoors
  847.  move.w d0,(a1)+
  848.  bra.s playdoors
  849. outofdoors:
  850.  
  851.  move.l #ObjectPoints,a2
  852.  move.l #ObjectData,a1
  853. playalien:
  854.  cmp.l #PlayerShotData,a1
  855.  bge.s doneallaliens
  856.  move.w (a1),d0
  857.  move.w (a0)+,(a2,d0.w*8)
  858.  move.w (a0)+,4(a2,d0.w*8)
  859.  move.w (a0)+,4(a1)
  860.  move.w (a0)+,12(a1)
  861.  move.l (a0)+,8(a1)
  862.  move.w #-1,16(a1)
  863.  adda.w #32,a1
  864.  bra.s playalien
  865. doneallaliens:
  866.  
  867.  move.b #3,chanpick
  868.  moveq #0,d0
  869.  move.b (a0),d0
  870.  blt.s nono0
  871.  move.w d0,Samplenum
  872.  move.b 1(a0),d3
  873.  move.b 2(a0),d4
  874.  jsr Recordednoise
  875. nono0:
  876.  addq #3,a0
  877.  
  878.  move.b #1,chanpick
  879.  moveq #0,d0
  880.  move.b (a0),d0
  881.  blt.s nono1
  882.  move.w d0,Samplenum
  883.  move.b 1(a0),d3
  884.  move.b 2(a0),d4
  885.  jsr Recordednoise
  886. nono1:
  887.  addq #3,a0
  888.  move.b #2,chanpick
  889.  moveq #0,d0
  890.  move.b (a0),d0
  891.  blt.s nono2
  892.  move.w d0,Samplenum
  893.  move.b 1(a0),d3
  894.  move.b 2(a0),d4
  895.  jsr Recordednoise
  896. nono2:
  897.  addq #3,a0
  898.  move.b #3,chanpick
  899.  moveq #0,d0
  900.  move.b (a0),d0
  901.  blt.s nono3
  902.  move.w d0,Samplenum
  903.  move.b 1(a0),d3
  904.  move.b 2(a0),d4
  905.  jsr Recordednoise
  906. nono3:
  907.  addq #3,a0
  908.  
  909.  move.l a0,RecordPtr
  910.  rts
  911.  
  912. TEXTBLOCK:
  913. ;      0123456789012345
  914.  dc.b '                '
  915.  dc.b '                '
  916.  dc.b '  COMING  SOON  '
  917.  dc.b '                '
  918.  dc.b '                '
  919.  dc.l ED1
  920.  dc.w -1,100
  921.  dc.w 0
  922. ;
  923.  dc.b '                '
  924.  dc.b '                '
  925.  dc.b '  ALIEN  BREED  '
  926.  dc.b '      1995      '
  927.  dc.b '                '
  928.  dc.l ED7
  929.  dc.w -1,100
  930.  dc.w -1
  931. ;
  932.  dc.b '                '
  933.  dc.b '                '
  934.  dc.b ' AS YOUVE NEVER ' 
  935.  dc.b '                '
  936.  dc.b '                '
  937.  dc.l ED3
  938.  dc.w 0,10
  939.  dc.w 0
  940. ;
  941.  dc.b '                '
  942.  dc.b '                '
  943.  dc.b '      SEEN      '
  944.  dc.b '                '
  945.  dc.b '                '
  946.  dc.l ED4
  947.  dc.w 0,10
  948.  dc.w 0
  949. ;
  950.  dc.b '                '
  951.  dc.b '                '
  952.  dc.b '       IT       '
  953.  dc.b '                '
  954.  dc.b '                '
  955.  dc.l ED5
  956.  dc.w 0,10
  957.  dc.w 0
  958. ;
  959.  dc.b '                '
  960.  dc.b '                '
  961.  dc.b '     BEFORE     '
  962.  dc.b '                '
  963.  dc.b '                '
  964.  dc.l ED6
  965.  dc.w 0,10
  966.  dc.w 0
  967. ;
  968.  dc.b ' PSYCHO  MUTANT '
  969.  dc.b ' CYBORG  ALIENS '
  970.  dc.b '     VERSUS     '
  971.  dc.b 'SEVERAL THOUSAND'
  972.  dc.b ' ROUNDS OF AMMO '
  973.  dc.l ED2
  974.  dc.w 0,100
  975.  dc.w 0
  976. ;
  977.  dc.b '                '
  978.  dc.b 'ONLY AMIGA MAKES'
  979.  dc.b '  IT  POSSIBLE  '
  980.  dc.b '                '
  981.  dc.b '                '
  982.  dc.l ED8
  983.  dc.w 0,100
  984.  dc.w 0
  985. ;
  986.  dc.b '                '
  987.  dc.b '  ONLY TEAM 17  '
  988.  dc.b '    MAKES IT    '
  989.  dc.b '     HAPPEN     '
  990.  dc.b '                '
  991.  dc.l ED9
  992.  dc.w 0,100
  993.  dc.w 0
  994. ;
  995.  dc.b '                '
  996.  dc.b '  ALIEN  BREED  '
  997.  dc.b '       3D       '
  998.  dc.b '                '
  999.  dc.b '                ' 
  1000.  dc.l ED1
  1001.  dc.w -1,1000
  1002.  dc.w 0
  1003.  
  1004. ENDTEXT:
  1005.  
  1006. TextPtr: dc.l TEXTBLOCK
  1007.  
  1008. BLURB:
  1009.  
  1010. backforanother:
  1011.  move.w #0,blcols+6
  1012.  move.w #0,blcols+18
  1013.  move.l #Blurbfield,$dff080
  1014.  move.w #0,$dff088
  1015.  
  1016.  move.l TextPtr,a0
  1017.  move.l #BlurbPic,a1
  1018.  move.l #charmap,a5
  1019.  move.l #font,a3
  1020.  move.w #4,d0
  1021. linesl:
  1022.  move.l a1,a2
  1023.  move.w #15,d1
  1024. charl:
  1025.  move.w #0,d2
  1026.  move.w #47,d3
  1027.  moveq #0,d4
  1028.  move.b (a0)+,d4
  1029.  move.b (a5,d4.w),d4
  1030.  muls #48*5,d4
  1031.  lea (a3,d4.w),a4
  1032. bitl:
  1033.  move.b (a4)+,(a2,d2.w)
  1034.  move.b (a4)+,1(a2,d2.w)
  1035.  move.b (a4)+,2(a2,d2.w)
  1036.  move.b (a4)+,3(a2,d2.w)
  1037.  move.b (a4)+,4(a2,d2.w)
  1038.  add.w #80,d2
  1039.  dbra d3,bitl
  1040.  add.w #5,a2
  1041.  dbra d1,charl
  1042.  adda.w #80*48,a1
  1043.  dbra d0,linesl
  1044.  
  1045.  move.l (a0)+,d0
  1046.  move.l d0,StartRecordPtr
  1047.  add.l #6,d0
  1048.  move.l d0,RecordPtr
  1049.  
  1050.  move.w 4(a0),d0
  1051.  or.b d0,backbeat
  1052.  
  1053.  move.w (a0)+,d0
  1054.  beq.s nofadeup
  1055.  bsr FADEUP
  1056. nofadeup
  1057.  move.w #$fff,blcols+6
  1058.  move.w #$fff,blcols+18
  1059.  move.w (a0),d0
  1060.  addq #4,a0
  1061.  
  1062.  bsr pause 
  1063.  cmp.l #ENDTEXT,a0
  1064.  blt.s nofirstt
  1065.  move.l #TEXTBLOCK,a0
  1066.  move.l a0,TextPtr
  1067.  bra backforanother
  1068. nofirstt:
  1069.  move.l a0,TextPtr
  1070.  
  1071.  rts
  1072.  
  1073. FADEUP:
  1074.  move.w #0,blcols+6
  1075.  move.w #0,blcols+18
  1076.  move.w #0,d5
  1077.  move.w #15,d1
  1078. outerfadeup:
  1079.  move.w #0,d6
  1080.  move.w #3,d2
  1081. innerfadeup: 
  1082.  move.w #0,d0
  1083.  bsr pause
  1084.  move.w d5,blcols+6
  1085.  move.w d6,blcols+18
  1086.  add.w #$444,d6
  1087.  dbra d2,innerfadeup
  1088.  add.w #$111,d5
  1089.  dbra d1,outerfadeup
  1090.  rts 
  1091.  
  1092. pause:
  1093.  btst #0,$dff000+intreqrl
  1094.  beq.s pause
  1095.  move.w #1,$dff000+intreq
  1096.  btst #7,$bfe001
  1097.  beq.s outofit
  1098.  dbra d0,pause
  1099. outofit:
  1100.  rts
  1101.  
  1102.  
  1103. FrameNum: dc.w 0
  1104.  
  1105. ***************************************************************************
  1106. ***************************************************************************
  1107. ****************** End of Main Loop here ********************************** 
  1108. ***************************************************************************
  1109. ***************************************************************************
  1110.  
  1111. Path:
  1112. ; incbin "testpath"
  1113. endpath:
  1114. pathpt: dc.l Path
  1115.  
  1116. PLR1KEYS: dc.b 0
  1117. PLR1PATH: dc.b 0
  1118. PLR1MOUSE: dc.b -1
  1119.  
  1120.  even
  1121.  
  1122.  
  1123. PLR1_Control:
  1124.  
  1125. ; Take a snapshot of everything.
  1126.  
  1127.  move.l PLR1_xoff,d2
  1128.  move.l d2,PLR1_oldxoff
  1129.  move.l d2,oldx
  1130.  move.l PLR1_zoff,d3
  1131.  move.l d3,PLR1_oldzoff
  1132.  move.l d3,oldz
  1133.  move.l PLR1s_xoff,d0
  1134.  move.l d0,PLR1_xoff
  1135.  move.l d0,newx
  1136.  move.l PLR1s_zoff,d1
  1137.  move.l d1,newz
  1138.  move.l d1,PLR1_zoff
  1139.  sub.l d2,d0
  1140.  sub.l d3,d1
  1141.  move.l d0,xdiff
  1142.  move.l d1,zdiff
  1143.  move.w PLR1s_sinval,PLR1_sinval
  1144.  move.w PLR1s_cosval,PLR1_cosval
  1145.  move.w PLR1s_angpos,PLR1_angpos
  1146.  move.l PLR1s_yoff,d0
  1147.  move.l d0,PLR1_yoff
  1148.  move.l d0,newy
  1149.  move.l #playerheight,thingheight
  1150.  move.l #40*256,StepUpVal
  1151.  
  1152.  move.l PLR1_Roompt,objroom
  1153.  move.w #%100000000,wallflags
  1154.  
  1155.  bsr MoveObject
  1156.  move.w #0,wallflags
  1157.  move.l objroom,PLR1_Roompt
  1158.  move.w newx,PLR1_xoff
  1159.  move.w newz,PLR1_zoff
  1160.  move.l PLR1_xoff,PLR1s_xoff
  1161.  move.l PLR1_zoff,PLR1s_zoff
  1162.  
  1163.  move.l PLR1_Roompt,a0
  1164.  move.l 2(a0),d0
  1165.  adda.w #22,a0
  1166.  sub.l #playerheight,d0
  1167.  move.l d0,PLR1s_tyoff
  1168.  
  1169. ; move.l (a0),a0        ; jump to viewpoint list
  1170.  * A0 is pointing at a pointer to list of points to rotate
  1171.  move.l (a0)+,PLR1_PointsToRotatePtr
  1172.  move.l a0,PLR1_ListOfGraphRooms
  1173.  
  1174. *****************************************************
  1175.  
  1176.  rts
  1177.  
  1178. KeyMap: ds.b 256
  1179.  
  1180. PLR2_Control:
  1181.  move.l #SineTable,a0
  1182.  
  1183.  bsr turnleftright
  1184.  
  1185.  move.w PLR2_angspd,d1
  1186.  move.w PLR2_angpos,d0
  1187.  move.w (a0,d0.w),PLR2_sinval
  1188.  adda.w #2048,a0
  1189.  move.w (a0,d0.w),PLR2_cosval
  1190.  
  1191.  move.l PLR2_xspdval,d6
  1192.  move.l PLR2_zspdval,d7
  1193.  
  1194.  move.w PLR2_xoff,oldxoff
  1195.  move.w PLR2_zoff,oldzoff
  1196.  
  1197.  neg.l d6
  1198.  ble.s .nobug1
  1199.  asr.l #1,d6
  1200.  add.l #1,d6
  1201.  bra.s .bug1
  1202. .nobug1
  1203.  asr.l #1,d6
  1204. .bug1:
  1205.  
  1206. ; beq.s goinnowhere
  1207. ; blt.s goinfor
  1208. ; cmp.l #4*65536,d6
  1209. ; ble.s goinnowhere
  1210. ; move.l #4*65536,d6
  1211. ;goinfor:
  1212. ; cmp.l #-4*65536,d6
  1213. ; bge.s goinnowhere
  1214. ; move.l #-4*65536,d6
  1215. ;goinnowhere:
  1216.  
  1217.  neg.l d7
  1218.  ble.s .nobug2
  1219.  asr.l #1,d7
  1220.  add.l #1,d7
  1221.  bra.s .bug2
  1222. .nobug2
  1223.  asr.l #1,d7
  1224. .bug2: 
  1225.  
  1226. ; beq.s goinnowhere2
  1227. ; blt.s goinfor2
  1228. ; cmp.l #4*65536,d7
  1229. ; ble.s goinnowhere2
  1230. ; move.l #4*65536,d7
  1231. ;goinfor2:
  1232. ; cmp.l #-4*65536,d7
  1233. ; bge.s goinnowhere2
  1234. ; move.l #-4*65536,d7
  1235. ;goinnowhere2:
  1236.  
  1237.  move.w PLR2_sinval,d1
  1238.  move.w PLR2_cosval,d2
  1239.  move.w PLR2_ForwardSpd,d3
  1240.  
  1241.  muls d3,d2
  1242.  muls d3,d1
  1243.  
  1244.  sub.l d1,d6
  1245.  sub.l d2,d7
  1246.  add.l PLR2_pushx,d6
  1247.  add.l PLR2_pushz,d7 
  1248.  add.l d6,PLR2_xspdval
  1249.  add.l d7,PLR2_zspdval
  1250.  move.l PLR2_xspdval,d6
  1251.  move.l PLR2_zspdval,d7
  1252.  add.l d6,PLR2_xoff
  1253.  add.l d7,PLR2_zoff
  1254.  
  1255.  move.w PLR2_xoff,newx
  1256.  move.w PLR2_zoff,newz
  1257.  move.w oldxoff,oldx
  1258.  move.w oldzoff,oldz
  1259.  move.l PLR2_xspdval,xdiff
  1260.  move.l PLR2_zspdval,zdiff
  1261.  move.l PLR2_Roompt,objroom
  1262.  move.w #%100000000,wallflags
  1263.  bsr MoveObject
  1264.  move.w #0,wallflags
  1265.  move.l objroom,PLR2_Roompt
  1266.  move.w newx,PLR2_xoff
  1267.  move.w newz,PLR2_zoff
  1268.  
  1269.  move.l PLR2_xoff,d0
  1270.  move.l PLR2_zoff,d1
  1271.  sub.l oldxoff,d0
  1272.  sub.l oldzoff,d1
  1273.  move.l #0,PLR2_pushx
  1274.  move.l #0,PLR2_pushz
  1275.  move.l d0,PLR2_opushx
  1276.  move.l d1,PLR2_opushz
  1277.  
  1278.  move.l PLR2_Roompt,a0
  1279.  move.l 2(a0),d0
  1280.  sub.l #playerheight,d0
  1281.  move.l d0,PLR2_tyoff
  1282.  adda.w #22,a0
  1283.  
  1284. ; move.l (a0),a0        ; jump to viewpoint list
  1285.  * A0 is pointing at a pointer to list of points to rotate
  1286.  move.l (a0)+,PLR2_PointsToRotatePtr
  1287.  move.l a0,PLR2_ListOfGraphRooms
  1288.  
  1289. *****************************************************
  1290.  
  1291.  move.l PLR2_tyoff,d0
  1292.  move.l PLR2_yoff,d1
  1293.  move.l PLR2_yvel,d2
  1294.  add.l d2,d1
  1295.  add.l #1024,d2
  1296.  sub.l d1,d0
  1297.  bgt.s .shouldfall
  1298.  move.l #0,d2
  1299.  add.l d0,d1
  1300. .shouldfall:
  1301.  move.l d2,PLR2_yvel
  1302.  move.l d1,PLR2_yoff
  1303.  rts
  1304.  
  1305.  
  1306. DrawDisplay:
  1307.  
  1308.  
  1309.  move.l #SineTable,a0
  1310.  move.w angpos,d0
  1311.  move.w (a0,d0.w),d6
  1312.  adda.w #2048,a0
  1313.  move.w (a0,d0.w),d7
  1314.  move.w d6,sinval
  1315.  move.w d7,cosval
  1316.  
  1317.  move.l yoff,d0
  1318.  asr.l #8,d0
  1319.  move.w d0,d1
  1320.  and.w #63,d1
  1321.  move.w d1,wallyoff
  1322.  asl.w #2,d0
  1323.  move.w d0,flooryoff
  1324.  
  1325.  move.w xoff,d6
  1326.  move.w d6,d3
  1327.  asr.w #1,d3
  1328.  add.w d3,d6
  1329.  asr.w #1,d6
  1330.  move.w d6,xoff34
  1331.  
  1332.  move.w zoff,d6
  1333.  move.w d6,d3
  1334.  asr.w #1,d3
  1335.  add.w d3,d6
  1336.  asr.w #1,d6
  1337.  move.w d6,zoff34
  1338.  
  1339.  bsr RotateLevelPts
  1340.  bsr RotateObjectPts
  1341.  bsr OrderZones
  1342.  
  1343.  move.l ListOfGraphRooms,a0
  1344.  cmp.l #BackGraph,(a0)
  1345.  bne.s noback
  1346.  
  1347.  jsr putinbackdrop
  1348. noback:
  1349.  
  1350.  move.l endoflist,a0
  1351. subroomloop:
  1352.  move.w -(a0),d7
  1353.  blt jumpoutofrooms
  1354.  
  1355. ; bsr setlrclip
  1356. ; move.w leftclip,d0
  1357. ; cmp.w rightclip,d0
  1358. ; bge subroomloop
  1359.  move.l a0,-(a7)
  1360.  move.l #ZoneGraphAdds,a0
  1361.  move.l (a0,d7.w*4),a0
  1362.  move.l a0,ThisRoomToDraw
  1363.  
  1364.  move.l ListOfGraphRooms,a1
  1365.  
  1366. finditit:
  1367.  tst.l (a1)
  1368.  blt nomoretodoatall
  1369.  cmp.l (a1),a0
  1370.  beq outoffind
  1371.  adda.w #12,a1
  1372.  bra finditit
  1373.  
  1374. outoffind:
  1375.  
  1376.  move.l a1,-(a7)
  1377.  
  1378.  move.l 4(a1),a0
  1379.      
  1380.  move.w #0,leftclip
  1381.  move.w #96,rightclip
  1382.  tst.l (a0)
  1383.  beq outofcliplop
  1384.  
  1385.  bsr NEWsetlrclip
  1386.  
  1387. intocliplop:        ; clips
  1388.  tst.l (a0)
  1389.  beq outofcliplop
  1390.  
  1391.  bsr NEWsetlrclip 
  1392.  bra intocliplop
  1393.  
  1394. outofcliplop:
  1395.  
  1396.  
  1397.  move.l ThisRoomToDraw,a0
  1398.  move.w leftclip,d0
  1399.  cmp.w #95,d0
  1400.  bge dontbothercantseeit
  1401.  move.w rightclip,d1
  1402.  blt dontbothercantseeit
  1403.  cmp.w d1,d0
  1404.  bge dontbothercantseeit
  1405.  
  1406.  bsr dothisroom
  1407.  
  1408. dontbothercantseeit:
  1409. pastemp:
  1410.  
  1411.  move.l (a7)+,a1
  1412.  move.l ThisRoomToDraw,a0
  1413.  adda.w #12,a1
  1414.  bra finditit
  1415.  
  1416. nomoretodoatall:
  1417.  
  1418.  move.l (a7)+,a0
  1419.  
  1420.  bra subroomloop
  1421.  
  1422. jumpoutofrooms:
  1423.  
  1424.  
  1425.  rts
  1426.  
  1427. TempBuffer: ds.l 100 
  1428.  
  1429. ClipTable: ds.l 30
  1430. EndOfClipPt: dc.l 0
  1431.  
  1432. dothisroom
  1433.  
  1434.  move.w (a0)+,d0
  1435.  move.w d0,currzone
  1436.  move.l #ZoneAdds,a1
  1437.  move.l (a1,d0.w*4),a1
  1438.  move.w 10(a1),ZoneBright
  1439.  
  1440. polyloop:
  1441.  move.w (a0)+,d0
  1442.  blt jumpoutofloop
  1443.  beq itsawall
  1444.  cmp.w #3,d0
  1445.  beq itsasetclip
  1446.  blt itsafloor
  1447.  cmp.w #4,d0
  1448.  beq itsanobject
  1449.  cmp.w #5,d0
  1450.  beq.s itsanarc
  1451.  cmp.w #6,d0
  1452.  beq itsalightbeam
  1453.  cmp.w #7,d0
  1454.  beq.s itswater
  1455.  cmp.w #9,d0
  1456.  ble itsachunkyfloor
  1457.  cmp.w #11,d0
  1458.  ble.s itsabumpyfloor
  1459.  cmp.w #12,d0
  1460.  beq.s itsbackdrop
  1461.  cmp.w #13,d0
  1462.  beq.s itsaseewall
  1463.  
  1464.  bra polyloop
  1465.  
  1466. itsaseewall:
  1467.  st seethru
  1468.  move.l #stripbufferthru,a1
  1469.  jsr itsawalldraw
  1470.  bra polyloop
  1471.  
  1472. itsbackdrop:
  1473.  jsr putinbackdrop
  1474.  bra polyloop
  1475.  
  1476. itswater:
  1477.  move.w #1,d0
  1478.  move.l #FloorLine,LineToUse
  1479.  st usewater
  1480.  clr.b usebumps
  1481.  jsr itsafloordraw
  1482.  bra polyloop
  1483.  
  1484. itsanarc:
  1485.  jsr CurveDraw
  1486.  bra polyloop
  1487. itsanobject:
  1488.  jsr ObjDraw
  1489.  bra polyloop
  1490. itsalightbeam:
  1491.  jsr LightDraw
  1492.  bra polyloop
  1493.  
  1494. itsabumpyfloor:
  1495.  sub.w #9,d0
  1496.  st usebumps
  1497.  st smoothbumps
  1498.  clr.b usewater
  1499.  move.l #BumpLine,LineToUse
  1500.  jsr itsafloordraw
  1501.  bra polyloop
  1502.  
  1503. itsachunkyfloor:
  1504.  subq.w #7,d0
  1505.  st usebumps
  1506. ; sub.w #10,topclip
  1507. ; add.w #10,botclip
  1508.  clr.b smoothbumps
  1509.  clr.b usewater
  1510.  move.l #BumpLine,LineToUse
  1511.  jsr itsafloordraw
  1512. ; add.w #10,topclip
  1513. ; sub.w #10,botclip
  1514.  bra polyloop 
  1515.  
  1516. itsafloor:
  1517.  
  1518.  move.l #FloorLine,LineToUse
  1519. * 1,2 = floor/roof
  1520.  clr.b usewater
  1521.  clr.b usebumps
  1522.  JSR STARTCOUNT
  1523.  jsr itsafloordraw
  1524.  JSR STOPCOUNT
  1525.  bra polyloop
  1526. itsasetclip:
  1527.  bsr setlrclip
  1528.  bra polyloop
  1529. itsawall:
  1530.  clr.b seethru
  1531.  move.l #stripbuffer,a1
  1532.  jsr itsawalldraw
  1533.  bra polyloop
  1534.  
  1535. jumpoutofloop:
  1536.  rts
  1537.  
  1538.  
  1539. ThisRoomToDraw: dc.l 0
  1540.  
  1541.  include "ab3:source/OrderZones"
  1542.  
  1543. ReadMouse:
  1544.  clr.l d0
  1545.  clr.l d1
  1546.  move.w $a(a6),d0
  1547.  lsr.w #8,d0
  1548.  ext.l d0
  1549.  move.w d0,d3
  1550.  move.w oldy,d2
  1551.  sub.w d2,d0
  1552.  
  1553.  cmp.w #127,d0
  1554.  blt nonegy
  1555.  move.w #255,d1
  1556.  sub.w d0,d1
  1557.  move.w d1,d0
  1558.  neg.w d0
  1559. nonegy:
  1560.  
  1561.  cmp.w #-127,d0
  1562.  bge nonegy2
  1563.  move.w #255,d1
  1564.  add.w d0,d1
  1565.  move.w d1,d0
  1566. nonegy2:
  1567.  
  1568.  add.b d0,d2
  1569.  add.w d0,oldy2
  1570.  move.w d2,oldy
  1571.  move.w d2,d0
  1572.  
  1573.  move.w oldy2,d0
  1574.  move.w d0,ymouse
  1575.  
  1576.  clr.l d0
  1577.  clr.l d1
  1578.  move.w $a(a6),d0
  1579.  ext.w d0
  1580.  ext.l d0
  1581.  move.w d0,d3
  1582.  move.w oldmx,d2
  1583.  sub.w d2,d0
  1584.  
  1585.  cmp.w #127,d0
  1586.  blt nonegx
  1587.  move.w #255,d1
  1588.  sub.w d0,d1
  1589.  move.w d1,d0
  1590.  neg.w d0
  1591. nonegx:
  1592.  
  1593.  cmp.w #-127,d0
  1594.  bge nonegx2
  1595.  move.w #255,d1
  1596.  add.w d0,d1
  1597.  move.w d1,d0
  1598. nonegx2:
  1599.  
  1600.  add.b d0,d2
  1601.  move.w d0,d1
  1602.  move.w d2,oldmx
  1603.  
  1604.  
  1605.  move.w #$0,$dff034
  1606.  btst #2,$dff016
  1607.  beq.s noturn
  1608.  
  1609.  add.w d0,oldx2
  1610.  move.w oldx2,d0
  1611.  and.w #2047,d0
  1612.  move.w d0,oldx2
  1613.  
  1614.  asl.w #2,d0
  1615.  sub.w prevx,d0
  1616.  add.w d0,prevx
  1617.  add.w d0,PLR1s_angpos
  1618.  move.w #0,lrs
  1619.  rts
  1620.  
  1621. noturn:
  1622.  
  1623. ; got to move lr instead. 
  1624.  
  1625. ; d1 = speed moved l/r
  1626.  
  1627.  move.w d1,lrs
  1628.  
  1629.  rts
  1630.  
  1631. lrs: dc.w 0
  1632. prevx: dc.w 0
  1633.  
  1634. mang: dc.w 0
  1635. oldymouse: dc.w 0
  1636. xmouse: dc.w 0
  1637. ymouse: dc.w 0
  1638. oldx2: dc.w 0
  1639. oldmx: dc.w 0
  1640. oldy: dc.w 0
  1641. oldy2: dc.w 0
  1642.  
  1643. RotateLevelPts:
  1644.  
  1645.  move.w sinval,d6
  1646.  swap d6
  1647.  move.w cosval,d6
  1648.  
  1649.  move.l PointsToRotatePtr,a0
  1650.  move.l #Points,a3
  1651.  move.l #Rotated,a1
  1652.  move.l #OnScreen,a2
  1653.  move.w xoff,d4
  1654.  move.w zoff,d5
  1655.  
  1656. ; move.w #$c40,$dff106
  1657. ; move.w #$f00,$dff180
  1658.  
  1659. pointrotlop:
  1660.  move.w (a0)+,d7
  1661.  blt.s outofpointrot
  1662.  
  1663.  move.w (a3,d7*4),d0
  1664.  sub.w d4,d0
  1665.  move.w d0,d2
  1666.  move.w 2(a3,d7*4),d1
  1667.  sub.w d5,d1
  1668.  muls d6,d2
  1669.  swap d6
  1670.  move.w d1,d3
  1671.  muls d6,d3
  1672.  sub.l d3,d2
  1673.  add.l d2,d2
  1674.  swap d2
  1675.  ext.l d2
  1676.  asl.l #7,d2
  1677.  move.l d2,(a1,d7*8)
  1678.  
  1679.  muls d6,d0
  1680.  swap d6
  1681.  muls d6,d1
  1682.  add.l d0,d1
  1683.  asl.l #2,d1
  1684.  swap d1
  1685.  move.l d1,4(a1,d7*8)
  1686.  
  1687.  tst.w d1
  1688.  bgt.s ptnotbehind
  1689.  move.w #-1,d2
  1690.  bra putin
  1691. ptnotbehind:
  1692.  
  1693.  divs d1,d2
  1694.  add.w #47,d2
  1695. putin:
  1696.  move.w d2,(a2,d7*2)
  1697.  
  1698.  bra pointrotlop
  1699. outofpointrot:
  1700.  
  1701. ; move.w #$c40,$dff106
  1702. ; move.w #$ff0,$dff180
  1703.  
  1704.  rts
  1705.  
  1706. RotateObjectPts:
  1707.  
  1708.  move.w sinval,d5
  1709.  move.w cosval,d6
  1710.  
  1711.  move.l #ObjectPoints,a0
  1712.  move.w NumObjectPoints,d7
  1713.  move.l #ObjRotated,a1
  1714.  move.l #ObsInLine,a2
  1715. objpointrotlop:
  1716.  
  1717.  move.w (a0),d0
  1718.  sub.w xoff,d0
  1719.  move.w 4(a0),d1
  1720.  addq #8,a0
  1721.  sub.w zoff,d1
  1722.  move.w d0,d2
  1723.  muls d6,d2
  1724.  move.w d1,d3
  1725.  muls d5,d3
  1726.  sub.l d3,d2
  1727.  add.l d2,d2
  1728.  swap d2
  1729.  move.w d2,(a1)+
  1730.  
  1731.  muls d5,d0
  1732.  muls d6,d1
  1733.  add.l d0,d1
  1734.  asl.l #2,d1
  1735.  swap d1
  1736.  moveq #0,d3
  1737.  
  1738.  tst.w d1
  1739.  ble.s notinline
  1740.  
  1741.  cmp.w #-60,d2
  1742.  blt.s notinline
  1743.  cmp.w #60,d2
  1744.  sle d3
  1745. notinline
  1746.  move.b d3,(a2)+
  1747.  
  1748.  move.w d1,(a1)+
  1749.  ext.l d2
  1750.  asl.l #7,d2
  1751.  move.l d2,(a1)+
  1752.  
  1753.  dbra d7,objpointrotlop
  1754.  
  1755.  rts
  1756.  
  1757. LightDraw:
  1758.  
  1759.  move.w (a0)+,d0
  1760.  move.w (a0)+,d1
  1761.  move.l #Rotated,a1
  1762.  move.w 6(a1,d0.w*8),d2
  1763.  ble.s oneendbehind
  1764.  move.w 6(a1,d1.w*8),d3
  1765.  bgt.s bothendsinfront
  1766.  
  1767. oneendbehind:
  1768.  rts
  1769. bothendsinfront:
  1770.  
  1771.  move.l #OnScreen,a2
  1772.  move.w (a2,d0.w*2),d0
  1773.  bge.s okleftend
  1774.  moveq #0,d0
  1775. okleftend:
  1776.  move.w (a2,d1.w*2),d1
  1777.  bgt.s somevis
  1778.  rts
  1779. somevis:
  1780.  cmp.w #95,d0
  1781.  ble.s somevis2
  1782.  rts
  1783. somevis2:
  1784.  cmp.w #95,d1
  1785.  ble.s okrightend
  1786.  move.w #95,d1
  1787. okrightend:
  1788.  
  1789.  sub.w d0,d1
  1790.  blt.s wrongbloodywayround
  1791.  move.l #brightentab,a4
  1792.  move.l #objintocop,a1
  1793.  lea (a1,d0.w*2),a1
  1794.  
  1795.  move.l frompt,a3
  1796.  move.w #104*4,d6
  1797.  move.w #79,d2
  1798. lacross:
  1799.  move.w d2,d3
  1800.  move.l a3,a2
  1801.  adda.w (a1)+,a2
  1802. ldown:
  1803.  add.w d6,a2
  1804.  move.w (a2),d7
  1805.  move.w (a4,d7.w*2),(a2)
  1806.  dbra d3,ldown
  1807.  dbra d1,lacross
  1808.  
  1809. wrongbloodywayround:
  1810.  
  1811.  rts
  1812.  
  1813. FaceToPlace: dc.w 0
  1814.  
  1815. Cheese:
  1816.  dc.w 4,15
  1817.  
  1818. FacesList:
  1819.  dc.w 0,4*4
  1820.  dc.w 1,2*4
  1821.  dc.w 0,2*4
  1822.  dc.w 2,2*4
  1823.  dc.w 0,2*4
  1824.  dc.w 1,3*4
  1825.  dc.w 0,2*4
  1826.  dc.w 2,3*4
  1827.  dc.w 0,5*4
  1828.  dc.w 1,2*4
  1829.  dc.w 0,2*4
  1830.  dc.w 2,2*4
  1831.  dc.w 0,2*4
  1832.  dc.w 1,2*4
  1833.  dc.w 0,2*4
  1834.  dc.w 2,3*4
  1835.  dc.w 0,1*4
  1836.  dc.w 1,3*4
  1837.  dc.w 0,1*4
  1838.  dc.w 2,3*4
  1839.  dc.w 0,1*4
  1840.  
  1841. EndOfFacesList:
  1842.  
  1843. FacesPtr:
  1844.  dc.l FacesList
  1845. FacesCounter:
  1846.  dc.w 0
  1847. Expression:
  1848.  dc.w 0
  1849.  
  1850. PlaceFace:
  1851.  
  1852.  move.w FacesCounter,d0
  1853.  subq #1,d0
  1854.  bgt.s NoNewFace
  1855.  
  1856.  move.l FacesPtr,a0
  1857.  
  1858.  move.w 2(a0),d0
  1859.  move.w (a0),Expression
  1860.  addq #4,a0
  1861.  cmp.l #EndOfFacesList,a0
  1862.  blt.s NotFirstFace
  1863.  
  1864.  move.l #FacesList,a0
  1865.  
  1866. NotFirstFace
  1867.  move.l a0,FacesPtr
  1868.  
  1869. NoNewFace:
  1870.  
  1871.  move.w d0,FacesCounter
  1872.  
  1873.  Move.w FaceToPlace,d0
  1874.  muls #5,d0
  1875.  add.w Expression,d0
  1876.  move.l #FacePlace+10,a0
  1877.  move.l #Faces,a1
  1878.  muls #(4*32*5),d0
  1879.  adda.w d0,a1
  1880.  move.w #4,d0
  1881.  move.w #24,d1
  1882.  
  1883.  move.w #4,d3
  1884. bitplaneloop:
  1885.  move.w #31,d2
  1886. PlaceFaceToPlaceInFacePlaceLoop:
  1887.  move.l (a1),(a0)
  1888.  adda.w d0,a1
  1889.  adda.w d1,a0
  1890.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  1891.  dbra d3,bitplaneloop
  1892.  
  1893.  rts
  1894.  
  1895. Energy:
  1896.  dc.w 191
  1897. OldEnergy:
  1898.  dc.w 191
  1899.  
  1900. FullEnergy:
  1901.  move.w #191,Energy
  1902.  move.w #191,OldEnergy
  1903.  move.l #Panel+41*24,a0
  1904.  move.w #6*6-1,d0
  1905. fillbar:
  1906.  move.l #$fefefefe,(a0)+
  1907.  dbra d0,fillbar
  1908.  rts
  1909.  
  1910. EnergyBar:
  1911.  
  1912.  move.w Energy,d0
  1913.  move.w #192,d1
  1914.  sub.w d0,d1
  1915.  ext.l d1
  1916.  divs #39,d1
  1917.  move.w d1,FaceToPlace
  1918.  cmp.w OldEnergy,d0
  1919.  bne.s gottochange
  1920.  
  1921. NoChange
  1922.  rts
  1923.  
  1924. gottochange:
  1925.   
  1926.  blt LessEnergy
  1927.  cmp.w #191,Energy
  1928.  blt.s NotMax
  1929.  move.w #191,Energy
  1930. NotMax:
  1931.  
  1932.  move.w Energy,d0
  1933.  move.w OldEnergy,d2
  1934.  sub.w d0,d2
  1935.  beq.s NoChange
  1936.  neg.w d2
  1937.  
  1938.  move.w OldEnergy,d3
  1939.  
  1940.  move.l #Panel+41*24,a0
  1941. EnergyRise:
  1942.  move.w d3,d0
  1943.  move.b d0,d1
  1944.  not.b d1
  1945.  and.b #7,d1
  1946.  beq.s noplot
  1947.  asr.w #3,d0
  1948.  lea (a0,d0.w),a1
  1949.  bset.b d1,(a1)
  1950.  bset.b d1,24(a1)
  1951.  bset.b d1,24*2(a1)
  1952.  bset.b d1,24*3(a1)
  1953.  bset.b d1,24*4(a1)
  1954.  bset.b d1,24*5(a1)
  1955. noplot:
  1956.  addq #1,d3
  1957.  subq #1,d2
  1958.  bgt.s EnergyRise
  1959.  
  1960.  move.w Energy,OldEnergy
  1961.  
  1962.  rts 
  1963.  
  1964.  
  1965. LessEnergy: 
  1966.  move.w OldEnergy,d2
  1967.  sub.w d0,d2
  1968.  
  1969.  move.w OldEnergy,d3
  1970.  
  1971.  move.l #Panel+41*24,a0
  1972. EnergyDrain:
  1973.  move.w d3,d0
  1974.  move.b d0,d1
  1975.  not.b d1
  1976.  asr.w #3,d0
  1977.  lea (a0,d0.w),a1
  1978.  bclr.b d1,(a1)
  1979.  bclr.b d1,24(a1)
  1980.  bclr.b d1,24*2(a1)
  1981.  bclr.b d1,24*3(a1)
  1982.  bclr.b d1,24*4(a1)
  1983.  bclr.b d1,24*5(a1)
  1984.  subq #1,d3
  1985.  subq #1,d2
  1986.  bgt.s EnergyDrain
  1987.  
  1988.  move.w Energy,OldEnergy
  1989.  
  1990.  rts 
  1991.  
  1992. end:
  1993.  jmp closeeverything 
  1994.  
  1995. do32:
  1996.  move.w #31,d7
  1997.  move.w #$180,d1
  1998. across:
  1999.  move.w d1,(a1)+
  2000.  move.w d1,(a3)+
  2001.  move.w #0,(a1)+
  2002.  move.w #0,(a3)+
  2003.  add.w #2,d1
  2004.  dbra d7,across
  2005.  rts
  2006.  
  2007.  
  2008.  
  2009. *************************************
  2010. * Set left and right clip values
  2011. *************************************
  2012.  
  2013.  
  2014. setlrclip:
  2015.  move.l #OnScreen,a1
  2016.  move.l #Rotated,a2
  2017.  
  2018.  move.w (a0)+,d0
  2019.  bge.s notdefaultleft
  2020.  move.w #0,leftclip
  2021.  move.w #0,d3
  2022.  bra leftnotoktoclip
  2023. notdefaultleft:
  2024.  
  2025.  move.w 6(a2,d0*8),d3    ; left z val
  2026.  bgt.s leftclipinfront
  2027.  
  2028.  move.w (a0),d0
  2029.  tst.w 6(a2,d0*8)
  2030.  bgt.s leftnotoktoclip
  2031.  move.w #95,leftclip
  2032.  move.w #0,rightclip
  2033.  addq #4,a0
  2034.  rts
  2035.  
  2036. leftclipinfront:
  2037.  move.w (a1,d0*2),d1    ; left x on screen
  2038.  cmp.w leftclip(pc),d1
  2039.  ble.s leftnotoktoclip
  2040.  cmp.w #95,d1
  2041.  ble.s leftclipnotoffright
  2042.  move.w #95,d1
  2043. leftclipnotoffright:
  2044.  move.w d1,leftclip
  2045. leftnotoktoclip:
  2046.  
  2047.  move.w (a0)+,d0
  2048.  bge.s notdefaultright
  2049.  move.w #96,rightclip
  2050.  move.w #0,d4
  2051.  bra rightnotoktoclip
  2052. notdefaultright:
  2053.  move.w 6(a2,d0*8),d4    ; right z val
  2054.  ble.s rightnotoktoclip
  2055.  
  2056. rightclipinfront:
  2057.  move.w (a1,d0*2),d1    ; right x on screen
  2058.  cmp.w rightclip(pc),d1
  2059.  bge.s rightnotoktoclip
  2060.  tst.w d1
  2061.  bge.s rightclipnotoffleft
  2062.  moveq #0,d1
  2063. rightclipnotoffleft:
  2064.  addq #1,d1
  2065.  move.w d1,rightclip
  2066. rightnotoktoclip:
  2067.  
  2068.  move.w (a0)+,d0
  2069.  bge.s nodefaulttopbot
  2070. defaulttopbot:
  2071.  move.w deftopclip,topclip
  2072.  move.w defbotclip,botclip
  2073.  rts
  2074. nodefaulttopbot:
  2075.  
  2076.  cmp.w d3,d4
  2077.  blt.s d4less
  2078.  exg d3,d4
  2079. d4less:
  2080.  tst.w d4
  2081.  ble.s defaulttopbot
  2082.  
  2083.  move.l #ZoneAdds,a2
  2084.  move.l (a2,d0.w*4),a2
  2085.  move.l 2(a2),d0    ; floor height
  2086.  move.l 6(a2),d1    ; roof height
  2087.  sub.l yoff,d0
  2088.  blt.s floordistant
  2089.  divs d4,d0
  2090.  bra.s donefloordiv
  2091. floordistant:
  2092.  divs d3,d0 
  2093. donefloordiv:
  2094.  
  2095.  sub.l yoff,d1
  2096.  blt.s roofnearest
  2097.  divs d3,d1
  2098.  bra doneroofdiv
  2099. roofnearest:
  2100.  divs d4,d1
  2101. doneroofdiv:
  2102.  
  2103.  add.w #40,d0
  2104.  add.w #40,d1
  2105.  cmp.w deftopclip(pc),d0
  2106.  bge.s botclipontop
  2107.  move.w deftopclip(pc),d0
  2108. botclipontop:
  2109.  cmp.w defbotclip(pc),d0
  2110.  ble.s botcliponbot
  2111.  move.w defbotclip(pc),d0
  2112. botcliponbot:
  2113.  cmp.w deftopclip(pc),d1
  2114.  bge.s topclipontop
  2115.  move.w deftopclip(pc),d1
  2116. topclipontop:
  2117.  cmp.w defbotclip(pc),d1
  2118.  ble.s topcliponbot
  2119.  move.w defbotclip(pc),d1
  2120. topcliponbot:
  2121.  move.w d0,botclip
  2122.  move.w d1,topclip
  2123.  
  2124.  rts
  2125.  
  2126. NEWsetlrclip:
  2127.  move.l #OnScreen,a1
  2128.  move.l #Rotated,a2
  2129.  
  2130.  move.w (a0)+,d0
  2131.  bge.s .notignoreleft
  2132.  
  2133. ; move.l #0,(a6)
  2134.  
  2135.  bra .leftnotoktoclip
  2136. .notignoreleft:
  2137.  
  2138.  move.w 6(a2,d0*8),d3    ; left z val
  2139.  bgt.s .leftclipinfront
  2140.  
  2141.  move.w (a0),d0
  2142.  blt.s .ignoreboth
  2143.  tst.w 6(a2,d0*8)
  2144.  bgt.s .leftnotoktoclip
  2145. .ignoreboth:
  2146. ; move.l #0,(a6)
  2147. ; move.l #96*65536,4(a6)
  2148.  move.w #0,leftclip
  2149.  move.w #96,rightclip
  2150.  addq #8,a6
  2151.  addq #2,a0
  2152.  rts
  2153.  
  2154. .leftclipinfront:
  2155.  move.w (a1,d0*2),d1    ; left x on screen
  2156. ; move.w d1,(a6)
  2157. ; move.w d3,2(a6)
  2158.  cmp.w leftclip(pc),d1
  2159.  ble.s .leftnotoktoclip
  2160.  move.w d1,leftclip
  2161. .leftnotoktoclip:
  2162.  
  2163.  move.w (a0)+,d0
  2164.  bge.s .notignoreright
  2165. ; move.w #96,4(a6)
  2166. ; move.w #0,6(a6)
  2167.  move.w #0,d4
  2168.  bra .rightnotoktoclip
  2169. .notignoreright:
  2170.  move.w 6(a2,d0*8),d4    ; right z val
  2171.  bgt.s .rightclipinfront
  2172. ; move.w #96,4(a6)
  2173. ; move.w #0,6(a6)
  2174.  bra.s .rightnotoktoclip
  2175.  
  2176. .rightclipinfront:
  2177.  move.w (a1,d0*2),d1    ; right x on screen
  2178. ; move.w d1,4(a6)
  2179. ; move.w d4,6(a6)
  2180.  
  2181.  cmp.w rightclip(pc),d1
  2182.  bge.s .rightnotoktoclip
  2183.  addq #1,d1
  2184.  move.w d1,rightclip
  2185. .rightnotoktoclip:
  2186.  addq #8,a6
  2187.  
  2188.  rts
  2189.  
  2190. FIRSTsetlrclip:
  2191.  move.l #OnScreen,a1
  2192.  move.l #Rotated,a2
  2193.  
  2194.  move.w (a0)+,d0
  2195.  bge.s .notignoreleft
  2196.  bra .leftnotoktoclip
  2197. .notignoreleft:
  2198.  
  2199.  move.w 6(a2,d0*8),d3    ; left z val
  2200.  bgt.s .leftclipinfront
  2201.  
  2202.  move.w (a0),d0
  2203.  blt.s .ignoreboth
  2204.  tst.w 6(a2,d0*8)
  2205.  bgt.s .leftnotoktoclip
  2206. .ignoreboth
  2207.  move.w #96,rightclip
  2208.  move.w #0,leftclip
  2209.  addq #2,a0
  2210.  rts
  2211.  
  2212. .leftclipinfront:
  2213.  move.w (a1,d0*2),d1    ; left x on screen
  2214.  cmp.w leftclip(pc),d1
  2215.  ble.s .leftnotoktoclip
  2216.  move.w d1,leftclip
  2217. .leftnotoktoclip:
  2218.  
  2219.  move.w (a0)+,d0
  2220.  bge.s .notignoreright
  2221.  move.w #0,d4
  2222.  bra .rightnotoktoclip
  2223. .notignoreright:
  2224.  move.w 6(a2,d0*8),d4    ; right z val
  2225.  ble.s .rightnotoktoclip
  2226.  
  2227. .rightclipinfront:
  2228.  move.w (a1,d0*2),d1    ; right x on screen
  2229.  cmp.w rightclip(pc),d1
  2230.  bge.s .rightnotoktoclip
  2231.  addq #1,d1
  2232.  move.w d1,rightclip
  2233. .rightnotoktoclip:
  2234.  
  2235. ; move.w leftclip,d0
  2236. ; move.w rightclip,d1
  2237. ; cmp.w d0,d1
  2238. ; bge.s .noswap
  2239. ; move.w #96,rightclip
  2240. ; move.w #0,leftclip
  2241. ;.noswap:
  2242.  
  2243.  rts
  2244.  
  2245.  
  2246. leftclip2: dc.w 0
  2247. rightclip2: dc.w 0
  2248. ZoneBright: dc.w 0
  2249.  
  2250. npolys: dc.w 0
  2251.  
  2252. PLR1_fire: dc.b 0
  2253. PLR2_fire: dc.b 0
  2254.  
  2255. turnleftright:
  2256.  
  2257.  move.w PLR2_angspd,d1
  2258.  move.w PLR2_angpos,d0
  2259.  
  2260.  move.w #120,d7
  2261.  muls TempFrames,d7
  2262.  
  2263.  move.w d1,d2
  2264.  neg.w d2
  2265.  cmp.w d7,d2
  2266.  ble.s okslow
  2267.  move.w d7,d2
  2268. okslow
  2269.  neg.w d7
  2270.  cmp.w d7,d2
  2271.  bge.s okslo
  2272.  move.w d7,d2
  2273. okslo:
  2274.  
  2275.  asr.w #1,d7
  2276.  
  2277.  btst #1,$d(a6)
  2278.  sne d3
  2279.  beq.s notleft
  2280.  move.w d7,d2
  2281.  neg.w d2
  2282. ; tst.w d1
  2283. ; bge.s notleft
  2284. ; moveq #0,d1
  2285. notleft
  2286.  
  2287.  btst #1,$c(a6)
  2288.  sne d4
  2289.  beq.s notright
  2290.  move.w d7,d2
  2291. ; tst.w d1
  2292. ; ble.s notright
  2293. ; moveq #0,d1
  2294. notright
  2295.  
  2296.  move.w #0,PLR2_ForwardSpd
  2297.  
  2298.  btst #0,$dff00c
  2299.  sne d5
  2300.  eor.b d4,d5
  2301.  beq.s notup
  2302.  move.w TempFrames,d7
  2303.  neg.w d7
  2304.  asl.w #2,d7
  2305.  move.w d7,PLR2_ForwardSpd
  2306. notup:
  2307.  
  2308.  btst #0,$dff00d
  2309.  sne d5
  2310.  eor.b d3,d5
  2311.  beq.s notdown
  2312.  move.w TempFrames,d7
  2313.  asl.w #2,d7
  2314.  move.w d7,PLR2_ForwardSpd
  2315. notdown:
  2316.  
  2317.  add.w d2,d1
  2318.  cmp.w #-360,d1
  2319.  bge.s okspdlft
  2320.  move.w #-360,d1
  2321. okspdlft:
  2322.  cmp.w #360,d1
  2323.  ble.s okspdrgt
  2324.  move.w #360,d1
  2325. okspdrgt:
  2326.  
  2327.  move.w d1,PLR2_angspd
  2328.  add.w d1,d0
  2329.  and.w #8191,d0
  2330.  move.w d0,PLR2_angpos
  2331.  rts
  2332.  
  2333. *****************************************************
  2334.  
  2335.  include "ab3:source/ObjectMove"
  2336.  
  2337. pastdata:
  2338. ***********************************
  2339. * This routine animates brightnesses.
  2340.  
  2341.  
  2342. liftpt: dc.l liftanimtab
  2343.  
  2344. brightpt:
  2345.  dc.l brightanimtab
  2346.  
  2347. liftanim:
  2348.  rts
  2349.  
  2350. ******************************
  2351.  include "ab3:source/Anims.demo"
  2352. ******************************
  2353.  
  2354. rotanimpt: dc.w 0
  2355. xradd: dc.w 5
  2356. yradd: dc.w 8
  2357. xrpos: dc.w 320
  2358. yrpos: dc.w 320
  2359.  
  2360. rotanim:
  2361.  rts
  2362.  
  2363. option:
  2364.  dc.l 0
  2365.  
  2366. ********** WALL STUFF *******************************
  2367.  
  2368.  include "AB3:source/wallroutine3.chipmem"
  2369.  
  2370. *****************************************************
  2371.  
  2372. ******************************************
  2373. * floor polygon
  2374.  
  2375. numsidestd: dc.w 0
  2376.  
  2377. NewCornerBuff:
  2378.  ds.l 100
  2379.  
  2380. itsafloordraw:
  2381.  
  2382. * If D0 =1 then its a floor otherwise (=2) it's
  2383. * a roof.
  2384.  
  2385.  move.w #0,above
  2386.  move.w (a0)+,d6    ; ypos of poly
  2387.  
  2388.  move.w leftclip(pc),d7
  2389.  cmp.w rightclip(pc),d7
  2390.  bge.s dontdrawreturn
  2391.  
  2392.  sub.w flooryoff,d6
  2393.  bgt.s below
  2394.  blt.s aboveplayer
  2395. dontdrawreturn:
  2396.  move.w (a0)+,d6    ; sides-1
  2397.  add.w d6,d6
  2398.  add.w d6,a0
  2399.  add.w #4+6,a0
  2400.  rts
  2401. aboveplayer:
  2402.  cmp.w #2,d0
  2403.  bne.s dontdrawreturn
  2404.  move.w #1,d0
  2405.  move.w d0,above
  2406.  neg.w d6
  2407. below:
  2408.  cmp.w #1,d0
  2409.  bne.s dontdrawreturn
  2410.  move.w d6,distaddr
  2411.  muls #64,d6
  2412.  move.l d6,ypos
  2413.  divs #40,d6        ; zpos of bottom
  2414.             ; visible line
  2415.  move.w d6,minz
  2416.  
  2417. ; Go round each point finding out
  2418. ; if it should be visible or not.
  2419.  
  2420.  move.l a0,-(a7)
  2421.  
  2422.  move.w (a0)+,d7    ; number of sides
  2423.  move.l #Rotated,a1
  2424.  move.l #OnScreen,a2
  2425.  move.l #NewCornerBuff,a3
  2426.  moveq #0,d4
  2427.  moveq #0,d5
  2428.  moveq #0,d6
  2429.  clr.b anyclipping
  2430.  
  2431. cornerprocessloop:
  2432.  
  2433.  move.w (a0)+,d0
  2434.  move.w 6(a1,d0.w*8),d1
  2435.  ble  .canttell
  2436.  
  2437.  move.w (a2,d0.w*2),d3
  2438.  cmp.w leftclip,d3
  2439.  bgt.s .nol
  2440.  st d4
  2441.  st anyclipping
  2442.  bra.s .nos
  2443. .nol:
  2444.  cmp.w rightclip,d3
  2445.  blt.s .nor
  2446.  st d6
  2447.  st anyclipping
  2448.  bra.s .nos
  2449. .nor:
  2450.  st d5
  2451. .nos:
  2452.  bra .cantell
  2453.  
  2454. .canttell:
  2455.  st d5
  2456.  st anyclipping
  2457.  
  2458. .cantell:
  2459.  
  2460.  
  2461.  dbra d7,cornerprocessloop
  2462.  
  2463.  move.l (a7)+,a0
  2464.  tst.b d5
  2465.  bne.s somefloortodraw
  2466.  eor.b d4,d6
  2467.  bne dontdrawreturn
  2468.  
  2469. somefloortodraw:
  2470.  
  2471.  move.w #80,top
  2472.  move.w #-1,bottom
  2473.  move.w #0,drawit
  2474.  move.l #Rotated,a1
  2475.  move.l #OnScreen,a2
  2476.  move.w (a0)+,d7    ; no of sides
  2477. sideloop:
  2478.  move.w minz,d6
  2479.  move.w (a0)+,d1
  2480.  move.w (a0),d3
  2481.  move.w 6(a1,d1*8),d4    ;first z
  2482.  cmp.w d6,d4
  2483.  bgt firstinfront
  2484.  move.w 6(a1,d3*8),d5    ; sec z
  2485.  cmp.w d6,d5
  2486.  ble bothbehind
  2487. ** line must be on left and partially behind.
  2488.  sub.w d5,d4
  2489.  move.l (a1,d1*8),d0
  2490.  sub.l (a1,d3*8),d0
  2491.  asr.l #7,d0
  2492.  sub.w d5,d6
  2493.  muls d6,d0    ; new x coord
  2494.  divs d4,d0
  2495.  ext.l d0
  2496.  asl.l #7,d0
  2497.  
  2498.  add.l (a1,d3*8),d0
  2499.  move.w minz,d4
  2500.  move.w (a2,d3*2),d2
  2501.  divs d4,d0
  2502.  add.w #47,d0
  2503.  move.l ypos,d3
  2504.  divs d5,d3
  2505.  move.w #40,d1 
  2506.  bra lineclipped
  2507.  
  2508. firstinfront:
  2509.  move.w 6(a1,d3*8),d5    ; sec z
  2510.  cmp.w d6,d5
  2511.  bgt bothinfront
  2512. ** line must be on right and partially behind.
  2513.  sub.w d4,d5    ; dz
  2514.  move.l (a1,d3*8),d2
  2515.  sub.l (a1,d1*8),d2    ; dx
  2516.  sub.w d4,d6
  2517.  asr.l #7,d2
  2518.  muls d6,d2    ; new x coord
  2519.  divs d5,d2
  2520.  ext.l d2
  2521.  asl.l #7,d2
  2522.  add.l (a1,d1*8),d2
  2523.  move.w minz,d5
  2524.  move.w (a2,d1*2),d0
  2525.  divs d5,d2
  2526.  add.w #47,d2
  2527.  move.l ypos,d1
  2528.  divs d4,d1
  2529.  move.w #40,d3 
  2530.  bra lineclipped
  2531.  
  2532. bothinfront:
  2533.  
  2534. * Also, usefully enough, both are on-screen
  2535. * so no bottom clipping is needed.
  2536.  
  2537.  move.w (a2,d1*2),d0    ; first x
  2538.  move.w (a2,d3*2),d2    ; second x
  2539.  move.l ypos,d1
  2540.  move.l d1,d3
  2541.  divs d4,d1        ; first y
  2542.  divs d5,d3        ; second y
  2543. lineclipped:
  2544.  move.l #rightsidetab,a3
  2545.  cmp.w d1,d3
  2546.  beq lineflat
  2547.  st drawit
  2548.  bgt lineonright
  2549.  move.l #leftsidetab,a3
  2550.  exg d1,d3
  2551.  exg d0,d2
  2552.  
  2553.  lea (a3,d1*2),a3
  2554.  
  2555.  cmp.w top(pc),d1
  2556.  bge.s .nonewtop
  2557.  move.w d1,top
  2558. .nonewtop:
  2559.  cmp.w bottom(pc),d3
  2560.  ble.s .nonewbot
  2561.  move.w d3,bottom
  2562. .nonewbot:
  2563.  
  2564.  sub.w d1,d3    ; dy
  2565.  sub.w d0,d2    ; dx
  2566.  
  2567.  blt .linegoingleft
  2568.  sub.w #1,d0
  2569.  
  2570.  ext.l d2
  2571.  divs d3,d2
  2572.  move.w d2,d6
  2573.  swap d2
  2574.  
  2575. ; moveq #0,d6
  2576. ; sub.w d3,d2
  2577. ; blt.s .noco
  2578. ;.makeco
  2579. ; addq #1,d6
  2580. ; sub.w d3,d2
  2581. ; bge.s .makeco
  2582. ;.noco
  2583. ; add.w d3,d2
  2584.  
  2585.  move.w d3,d4
  2586.  move.w d3,d5
  2587.  subq #1,d5
  2588.  move.w d6,d1
  2589.  addq #1,d1
  2590.  
  2591. .pixlopright:
  2592.  move.w d0,(a3)+
  2593.  sub.w d2,d4
  2594.  bge.s .nobigstep
  2595.  add.w d1,d0
  2596.  add.w d3,d4
  2597.  dbra d5,.pixlopright
  2598.  bra lineflat
  2599. .nobigstep
  2600.  add.w d6,d0
  2601.  dbra d5,.pixlopright
  2602.  bra lineflat
  2603.  
  2604. .linegoingleft:
  2605.  
  2606.  sub.w #1,d0
  2607.  
  2608.  neg.w d2
  2609.  
  2610.  ext.l d2
  2611.  divs d3,d2
  2612.  move.w d2,d6
  2613.  swap d2
  2614.  
  2615.  
  2616. ; moveq #0,d6
  2617. ; sub.w d3,d2
  2618. ; blt.s .nocol
  2619. ;.makecol
  2620. ; addq #1,d6
  2621. ; sub.w d3,d2
  2622. ; bge.s .makecol
  2623. ;.nocol
  2624. ; add.w d3,d2
  2625.  
  2626.  
  2627.  
  2628.  move.w d3,d4
  2629.  move.w d3,d5
  2630.  subq #1,d5
  2631.  
  2632.  move.w d6,d1
  2633.  addq #1,d1
  2634.  
  2635. .pixlopleft:
  2636.  sub.w d2,d4
  2637.  bge.s .nobigstepl
  2638.  sub.w d1,d0
  2639.  add.w d3,d4
  2640.  move.w d0,(a3)+
  2641.  dbra d5,.pixlopleft
  2642.  bra lineflat
  2643.  
  2644. .nobigstepl
  2645.  sub.w d6,d0
  2646.  move.w d0,(a3)+
  2647.  dbra d5,.pixlopleft
  2648.  bra lineflat
  2649.  
  2650. lineonright:
  2651.  
  2652.  lea (a3,d1*2),a3
  2653.  
  2654.  cmp.w top(pc),d1
  2655.  bge.s .nonewtop
  2656.  move.w d1,top
  2657. .nonewtop:
  2658.  cmp.w bottom(pc),d3
  2659.  ble.s .nonewbot
  2660.  move.w d3,bottom
  2661. .nonewbot:
  2662.  
  2663.  sub.w d1,d3    ; dy
  2664.  sub.w d0,d2    ; dx
  2665.  blt .linegoingleft
  2666.  addq #1,d0
  2667.  ext.l d2
  2668.  divs d3,d2
  2669.  move.w d2,d6
  2670.  swap d2
  2671.  
  2672. ; moveq #0,d6
  2673. ; sub.w d3,d2
  2674. ; blt.s .noco
  2675. ;.makeco
  2676. ; addq #1,d6
  2677. ; sub.w d3,d2
  2678. ; bge.s .makeco
  2679. ;.noco
  2680. ; add.w d3,d2
  2681.  
  2682.  move.w d3,d4
  2683.  move.w d3,d5
  2684.  subq #1,d5
  2685.  move.w d6,d1
  2686.  addq #1,d1
  2687.  
  2688. .pixlopright:
  2689.  sub.w d2,d4
  2690.  bge.s .nobigstep
  2691.  add.w d1,d0
  2692.  add.w d3,d4
  2693.  move.w d0,(a3)+
  2694.  dbra d5,.pixlopright
  2695.  bra lineflat
  2696.  
  2697. .nobigstep
  2698.  add.w d6,d0
  2699.  move.w d0,(a3)+
  2700.  dbra d5,.pixlopright
  2701.  bra lineflat
  2702.  
  2703. .linegoingleft:
  2704.  addq #1,d0
  2705.  neg.w d2
  2706.  
  2707.  ext.l d2
  2708.  divs d3,d2
  2709.  move.w d2,d6
  2710.  swap d2
  2711.  
  2712.  
  2713. ; moveq #0,d6
  2714. ; sub.w d3,d2
  2715. ; blt.s .nocol
  2716. ;.makecol
  2717. ; addq #1,d6
  2718. ; sub.w d3,d2
  2719. ; bge.s .makecol
  2720. ;.nocol
  2721. ; add.w d3,d2
  2722.  
  2723.  move.w d3,d4
  2724.  move.w d3,d5
  2725.  subq #1,d5
  2726.  move.w d6,d1
  2727.  addq #1,d1
  2728.  
  2729. .pixlopleft:
  2730.  move.w d0,(a3)+
  2731.  sub.w d2,d4
  2732.  bge.s .nobigstepl
  2733.  sub.w d1,d0
  2734.  add.w d3,d4
  2735.  dbra d5,.pixlopleft
  2736.  bra lineflat
  2737.  
  2738. .nobigstepl
  2739.  sub.w d6,d0
  2740.  dbra d5,.pixlopleft
  2741.  
  2742. lineflat:
  2743.  
  2744. bothbehind:
  2745.  dbra d7,sideloop
  2746.  
  2747. pastsides:
  2748.  
  2749.  
  2750.  addq #2,a0
  2751.  
  2752.  move.w #104*4,linedir
  2753.  move.l frompt,a6
  2754.  add.l #104*4*41,a6
  2755.  move.w (a0)+,scaleval
  2756.  move.w (a0)+,whichtile
  2757.  move.w (a0)+,d6
  2758.  add.w ZoneBright,d6
  2759.  move.w d6,lighttype
  2760.  move.w above(pc),d6
  2761.  beq groundfloor
  2762. * on ceiling:
  2763.  move.w #-104*4,linedir
  2764.  suba.w #104*4,a6
  2765. groundfloor:
  2766.  
  2767.  move.w xoff,d6
  2768.  move.w zoff,d7
  2769.  move.w scaleval,d3
  2770.  move.l scaleprogfrom(pc,d3.w*4),scaleprog
  2771.  tst.w d3
  2772.  beq.s .samescale
  2773.  bgt.s .scaledown
  2774.  neg.w d3
  2775.  asr.l d3,d7
  2776.  asr.l d3,d6
  2777.  bra.s .samescale
  2778. .scaledown:
  2779.  asl.l d3,d6
  2780.  asl.l d3,d7
  2781. .samescale
  2782.  asl.w #8,d7
  2783.  move.w d6,sxoff
  2784.  move.w d7,szoff
  2785.  bra pastscale 
  2786.  
  2787.  asr.l #3,d1
  2788.  asr.l #3,d2
  2789.  asr.l #2,d1
  2790.  asr.l #2,d2
  2791.  asr.l #1,d1
  2792.  asr.l #1,d2
  2793. scaleprogfrom
  2794.  nop
  2795.  nop
  2796.  asl.l #1,d1
  2797.  asl.l #1,d2
  2798.  asl.l #2,d1
  2799.  asl.l #2,d2
  2800.  asl.l #3,d1
  2801.  asl.l #3,d2
  2802.  
  2803. top: dc.w 0
  2804. bottom: dc.w 0
  2805. ypos: dc.l 0
  2806. nfloors: dc.w 0
  2807. lighttype: dc.w 0
  2808. above: dc.w 0 
  2809. linedir: dc.w 0
  2810. distaddr: dc.w 0
  2811.  
  2812. minz: dc.w 0
  2813. leftsidetab:
  2814.  ds.w 80
  2815. rightsidetab:
  2816.  ds.w 80
  2817. leftsideclip:
  2818.  ds.w 80
  2819. rightsideclip:
  2820.  ds.w 80
  2821.  
  2822. movespd: dc.w 0
  2823. largespd: dc.l 0
  2824.  
  2825. pastscale:
  2826.  
  2827.  tst.b drawit(pc)
  2828.  beq dontdrawfloor
  2829.  
  2830.  move.l a0,-(a7)
  2831.  
  2832.  move.l #leftsidetab,a4
  2833.  move.w top(pc),d1
  2834.  move.w bottom(pc),d7
  2835.  tst.w above
  2836.  beq.s clipfloor
  2837.  
  2838.  move.w #40,d3
  2839.  move.w d3,d4
  2840.  sub.w topclip,d3
  2841.  sub.w botclip,d4
  2842.  cmp.w d3,d1
  2843.  bge predontdrawfloor
  2844.  cmp.w d4,d7
  2845.  blt predontdrawfloor
  2846.  cmp.w d4,d1
  2847.  bge.s .nocliptoproof
  2848.  move.w d4,d1
  2849. .nocliptoproof
  2850.  cmp.w d3,d7
  2851.  blt doneclip
  2852.  move.w d3,d7
  2853.  bra doneclip
  2854.  
  2855. clipfloor:
  2856.  move.w botclip,d4
  2857.  sub.w #40,d4
  2858.  cmp.w d4,d1
  2859.  bge predontdrawfloor
  2860.  move.w topclip,d3
  2861.  sub.w #40,d3
  2862.  cmp.w d3,d1
  2863.  bge.s .nocliptopfloor
  2864.  move.w d3,d1
  2865. .nocliptopfloor 
  2866.  cmp.w d3,d7
  2867.  ble predontdrawfloor
  2868.  cmp.w d4,d7
  2869.  blt.s .noclipbotfloor
  2870.  move.w d4,d7
  2871. .noclipbotfloor:
  2872.  
  2873. doneclip:
  2874.  
  2875.  lea (a4,d1*2),a4
  2876.  move.l #dists,a2
  2877.  move.w distaddr,d0
  2878.  muls #20,d0
  2879.  adda.w d0,a2
  2880.  lea (a2,d1*2),a2
  2881.  sub.w d1,d7
  2882.  ble predontdrawfloor 
  2883.  muls linedir,d1
  2884.  add.l d1,a6
  2885.  move.l #floorscalecols,a1
  2886.  move.l LineToUse,a5
  2887.  
  2888.  tst.b anyclipping
  2889.  beq dofloornoclip
  2890.  
  2891. dofloor:
  2892.  move.w (a2)+,d0
  2893.  move.w leftclip(pc),d3
  2894.  move.w rightclip(pc),d4
  2895.  move.w rightsidetab-leftsidetab(a4),d2
  2896.  addq #1,d2
  2897.  cmp.w d3,d2
  2898.  ble.s nodrawline
  2899.  cmp.w d4,d2
  2900.  ble.s noclipright
  2901.  move.w d4,d2
  2902. noclipright:
  2903.  move.w (a4),d1
  2904.  cmp.w d4,d1
  2905.  bge.s nodrawline
  2906.  cmp.w d3,d1
  2907.  bge.s noclipleft
  2908.  move.w d3,d1
  2909. noclipleft:
  2910.  cmp.w d1,d2
  2911.  ble.s nodrawline
  2912.  
  2913.  move.w d1,leftedge
  2914.  move.w d2,rightedge
  2915.  
  2916.  move.l a6,a3
  2917.  movem.l d7/a2/a4/a5/a6,-(a7)
  2918.  jsr (a5)
  2919.  movem.l (a7)+,d7/a2/a4/a5/a6
  2920. nodrawline
  2921.  adda.w linedir(pc),a6
  2922.  addq #2,a4
  2923.  subq #1,d7
  2924.  bgt dofloor
  2925.  
  2926. predontdrawfloor
  2927.  move.l (a7)+,a0
  2928.  
  2929. dontdrawfloor:
  2930.  
  2931.  CACHE_FREEZE_OFF d2
  2932.  rts
  2933.  
  2934. anyclipping: dc.w 0
  2935.  
  2936. dofloornoclip:
  2937.  move.w (a2)+,d0
  2938.  move.w rightsidetab-leftsidetab(a4),d2
  2939.  addq #1,d2
  2940.  move.w (a4)+,leftedge
  2941.  move.w d2,rightedge
  2942.  
  2943.  move.l a6,a3
  2944.  movem.l d7/a2/a4/a5/a6,-(a7)
  2945.  jsr (a5)
  2946.  movem.l (a7)+,d7/a2/a4/a5/a6
  2947.  adda.w linedir(pc),a6
  2948.  subq #1,d7
  2949.  bgt dofloornoclip
  2950.  
  2951.  bra predontdrawfloor
  2952.  
  2953. dists:
  2954.  incbin "floordists"
  2955.  
  2956. LineToUse: dc.l 0
  2957.  
  2958. ***************************
  2959. * Right then, time for the floor
  2960. * routine...
  2961. * For test purposes, give it
  2962. * a3 = point to screen
  2963. * d0= z distance away
  2964. * and sinval+cosval must be set up.
  2965. ***************************
  2966.  
  2967. leftedge: dc.w 0
  2968. rightedge: dc.w 0
  2969.  
  2970. rndpt: dc.l rndtab
  2971.  
  2972. WaterFloorLine:
  2973.  
  2974.  CACHE_OFF d2
  2975.  
  2976.  move.l rndpt,a2
  2977.  move.w (a2)+,d1
  2978.  move.w (a2)+,d2
  2979.  move.w (a2)+,d3
  2980.  cmp.l #endrnd-4,a2
  2981.  blt.s okrnd
  2982.  suba.w #98,a2
  2983. okrnd: 
  2984.  move.l a2,rndpt
  2985.  
  2986.  asr.w #6,d0
  2987.  move.w d0,d1
  2988.  move.w d0,d2
  2989.  move.w d0,d3
  2990.  move.l clipd(pc,d1.w*4),d1
  2991.  move.l clipd(pc,d2.w*4),d2
  2992.  move.l clipd(pc,d3.w*4),d3
  2993.  bra pcli
  2994.  
  2995.  dc.l 0
  2996. clipd:
  2997.  dc.l 0
  2998.  dc.l 512
  2999.  dc.l 512*2
  3000.  dc.l 512*3
  3001.  dc.l 512*4
  3002.  dc.l 512*5
  3003.  dc.l 512*6
  3004.  dc.l 512*7
  3005.  dc.l 512*8
  3006.  dc.l 512*9
  3007.  dc.l 512*10
  3008.  dc.l 512*11
  3009.  dc.l 512*12
  3010.  dc.l 512*13
  3011.  dc.l 512*14
  3012.  dc.l 512*15
  3013.  dc.l 512*15
  3014.  dc.l 512*15
  3015.  dc.l 512*15
  3016.  dc.l 512*15
  3017.  dc.l 512*15
  3018.  dc.l 512*15
  3019.  dc.l 512*15
  3020.  dc.l 512*15
  3021.  dc.l 512*15
  3022.  dc.l 512*15
  3023.  dc.l 512*15
  3024.  
  3025. pcli:
  3026.  
  3027.  move.l #brightentab,a2
  3028.  move.l a2,a4
  3029.  move.l a4,a5
  3030.  add.l d1,a2
  3031.  add.l d2,a4
  3032.  add.l d3,a5
  3033.  
  3034.  move.l #doacrossline,a1
  3035.  move.w leftedge(pc),d1
  3036.  move.w rightedge(pc),d2
  3037.  sub.w d1,d2
  3038.  move.w time(pc,d1.w*2),d1
  3039.  move.w time(pc,d2.w*2),d2
  3040.  lea (a1,d1.w),a1
  3041.  move.w (a1,d2.w),d4
  3042.  move.w #$4e75,(a1,d2.w)
  3043.  
  3044.  moveq #0,d0
  3045.  jsr (a1)
  3046.  move.w d4,(a1,d2.w)
  3047.  
  3048.  CACHE_ON d2
  3049.  
  3050.  rts
  3051.  
  3052. time:
  3053. val SET 0
  3054.  REPT 100
  3055.  dc.w val
  3056. val SET val+10
  3057.  ENDR
  3058.  
  3059. storeit: dc.l 0
  3060.  
  3061. doacrossline:
  3062.  incbin "Doacrossline"
  3063.  rts
  3064.  
  3065. dst: dc.w 0
  3066.  
  3067. FloorLine:
  3068.  
  3069.  move.l #floortile,a0
  3070.  adda.w whichtile,a0
  3071.  move.w lighttype,d1
  3072.  
  3073.  move.w d0,dst
  3074.  
  3075.  move.w d0,d2
  3076. *********************
  3077. * Old version
  3078.  asr.w #6,d2
  3079.  add.w #5,d1
  3080. *********************
  3081. ; asr.w #3,d2
  3082. ; sub.w #4,d2
  3083. ; cmp.w #6,d2
  3084. ; blt.s flbrbr
  3085. ; move.w #6,d2
  3086. ;flbrbr:
  3087. *********************
  3088.  add.w d2,d1
  3089.  bge.s .fixedbright
  3090.  moveq #0,d1
  3091. .fixedbright:
  3092.  cmp.w #28,d1
  3093.  ble.s .smallbright
  3094.  move.w #28,d1
  3095. .smallbright:
  3096.  lea floorscalecols,a1
  3097.  add.l floorbright(pc,d1.w*4),a1
  3098.  bra pastfloorbright
  3099.  
  3100. ConstCol: dc.w 0
  3101.  
  3102. BumpLine:
  3103.  
  3104.  tst.b smoothbumps
  3105.  beq.s Chunky
  3106.  
  3107.  move.l #SmoothTile,a0
  3108.  lea Smoothscalecols,a1
  3109.  bra pastast
  3110.  
  3111. Chunky:
  3112.  
  3113.  moveq #0,d2
  3114.  move.l #Bumptile,a0
  3115.  move.w whichtile,d2
  3116.  adda.w d2,a0
  3117.  ror.l #2,d2
  3118.  lsr.w #6,d2
  3119.  rol.l #2,d2
  3120.  and.w #15,d2
  3121.  move.l #ConstCols,a1
  3122.  move.w (a1,d2.w*2),ConstCol
  3123.  lea Bumpscalecols,a1
  3124.  
  3125. pastast:
  3126.  move.w lighttype,d1
  3127.  
  3128.  move.w d0,dst
  3129.  
  3130.  move.w d0,d2
  3131. *********************
  3132. * Old version
  3133.  asr.w #6,d2
  3134.  add.w #5,d1
  3135. *********************
  3136. ; asr.w #3,d2
  3137. ; sub.w #4,d2
  3138. ; cmp.w #6,d2
  3139. ; blt.s flbrbr
  3140. ; move.w #6,d2
  3141. ;flbrbr:
  3142. *********************
  3143.  add.w d2,d1
  3144.  bge.s .fixedbright
  3145.  moveq #0,d1
  3146. .fixedbright:
  3147.  cmp.w #28,d1
  3148.  ble.s .smallbright
  3149.  move.w #28,d1
  3150. .smallbright:
  3151.  add.l floorbright(pc,d1.w*4),a1
  3152.  bra pastfloorbright
  3153.  
  3154.  
  3155. floorbright:
  3156.  dc.l 512*0
  3157.  dc.l 512*1
  3158.  dc.l 512*1
  3159.  dc.l 512*2
  3160.  dc.l 512*2
  3161.  
  3162.  dc.l 512*3
  3163.  dc.l 512*3
  3164.  dc.l 512*4
  3165.  dc.l 512*4
  3166.  dc.l 512*5
  3167.  
  3168.  dc.l 512*5
  3169.  dc.l 512*6
  3170.  dc.l 512*6
  3171.  dc.l 512*7
  3172.  dc.l 512*7
  3173.  
  3174.  dc.l 512*8
  3175.  dc.l 512*8
  3176.  dc.l 512*9
  3177.  dc.l 512*9
  3178.  dc.l 512*10
  3179.  
  3180.  dc.l 512*10
  3181.  dc.l 512*11
  3182.  dc.l 512*11
  3183.  dc.l 512*12
  3184.  dc.l 512*12
  3185.  
  3186.  dc.l 512*13
  3187.  dc.l 512*13
  3188.  dc.l 512*14
  3189.  dc.l 512*14
  3190.  
  3191. widthleft: dc.w 0
  3192. scaleval: dc.w 0
  3193. sxoff: dc.w 0
  3194. szoff: dc.w 0
  3195. xoff34: dc.w 0
  3196. zoff34: dc.w 0
  3197. scosval: dc.w 0
  3198. ssinval: dc.w 0
  3199.  
  3200.  
  3201. floorsetbright:
  3202.  move.l #walltiles,a0
  3203.  
  3204. pastfloorbright
  3205.  
  3206.  
  3207.  move.w d0,d1
  3208.  muls cosval,d1    ; change in x across whole width
  3209.  move.w d0,d2
  3210.  muls sinval,d2    ; change in z across whole width
  3211.  neg.l d2
  3212. scaleprog:
  3213.  asr.l #1,d1
  3214.  asr.l #1,d2
  3215.  
  3216.  move.l d1,d3 ;    z cos
  3217.  move.l d3,d6
  3218.  move.l d3,d5
  3219.  asr.l #1,d6
  3220.  add.l d6,d3
  3221.  asr.l #1,d3
  3222.  
  3223.  move.l d2,d4    ; z sin
  3224.  move.l d4,d6
  3225.  asr.l #1,d6
  3226.  add.l d4,d6
  3227.  add.l d3,d4
  3228.  neg.l d4    ; start x
  3229.  
  3230.  asr.l #1,d6    ; zsin/2
  3231.  sub.l d6,d5    ; start z
  3232.  
  3233.  move.w d4,startsmoothx
  3234.  move.w d5,startsmoothz
  3235.  
  3236.  swap d4
  3237.  asr.l #8,d5
  3238.  add.w szoff,d5
  3239.  add.w sxoff,d4
  3240.  and.w #63,d4
  3241.  and.w #63*256,d5
  3242.  move.b d4,d5
  3243.  
  3244.  asr.l #6,d1
  3245.  asr.l #6,d2
  3246.  move.w leftedge(pc),d6
  3247.  beq.s nomultleft
  3248.  
  3249.  move.l d1,d3
  3250.  asr.l #6,d3
  3251.  muls d6,d3
  3252.  asl.l #6,d3
  3253.  swap d3
  3254.  add.b d3,d5
  3255.  
  3256.  move.l d2,d3
  3257.  asr.l #6,d3
  3258.  muls d6,d3
  3259.  asl.l #6,d3
  3260.  swap d3
  3261.  lsl.w #8,d3
  3262.  add.w d3,d5
  3263.  
  3264. nomultleft:
  3265.  
  3266.  move.w d1,a4
  3267.  move.w d2,a5
  3268.  asr.l #8,d2
  3269.  and.w #%0011111100000000,d2
  3270.  swap d1
  3271.  add.w d1,d2
  3272.  move.w #%11111100111111,d1
  3273.  and.w d1,d5
  3274.  swap d5
  3275.  move.w startsmoothz,d5
  3276.  swap d5
  3277.  swap d2
  3278.  move.w a5,d2
  3279.  swap d2
  3280.  
  3281. ***********************************
  3282.  
  3283.  move.w d6,a2
  3284.  move.l d2,d6
  3285.  add.w #256,d6
  3286.  
  3287.  moveq #0,d0
  3288.  
  3289.  tst.w a2
  3290.  beq startatleftedge
  3291.  
  3292.  move.w widthleft(pc),d4
  3293.  
  3294.  move.w rightedge(pc),d3
  3295.  
  3296.  cmp.w #31,a2
  3297.  bgt.s notinfirststrip
  3298.  lea (a3,a2.w*4),a3
  3299.  cmp.w #32,d3
  3300.  ble.s allinfirststrip
  3301.  move.w #32,d7
  3302.  sub.w d7,d3
  3303.  sub.w a2,d7
  3304.  bra intofirststrip
  3305.  
  3306. allinfirststrip
  3307.  sub.w a2,d3
  3308.  move.w d3,d7
  3309.  move.w #0,d4
  3310.  bra allintofirst
  3311.  
  3312. notinfirststrip:
  3313.  sub.w #32,a2
  3314.  sub.w #32,d3
  3315.  adda.w #33*4,a3
  3316.  cmp.w #31,a2
  3317.  bgt.s notstartinsec
  3318.  lea (a3,a2.w*4),a3
  3319.  cmp.w #32,d3
  3320.  ble.s allinsecstrip
  3321.  move.w #32,d7
  3322.  sub.w d7,d3
  3323.  sub.w a2,d7
  3324.  move.w d3,d4
  3325.  bra tstwat
  3326.  
  3327. allinsecstrip
  3328.  sub.w a2,d3
  3329.  move.w d3,d7
  3330.  move.w #0,d4
  3331.  bra tstwat
  3332.  rts
  3333.  
  3334. notstartinsec:
  3335.  sub.w #32,a2
  3336.  sub.w #32,d3
  3337.  adda.w #33*4,a3
  3338.  lea (a3,a2.w*4),a3
  3339.  cmp.w #32,d3
  3340.  ble.s allinthirdstrip
  3341.  move.w #32,d7
  3342.  sub.w d7,d3
  3343.  sub.w a2,d7
  3344.  move.w d3,d4
  3345.  bra tstwat
  3346.  rts
  3347.  
  3348. allinthirdstrip
  3349.  sub.w a2,d3
  3350.  move.w d3,d7
  3351.  move.w #0,d4
  3352.  bra tstwat
  3353.  rts
  3354.  
  3355. startatleftedge:
  3356.  
  3357.  move.w rightedge(pc),d3
  3358.  sub.w a2,d3
  3359.  
  3360.  move.w d3,d7
  3361.  cmp.w #32,d7
  3362.  ble.s .notoowide
  3363.  move.w #32,d7
  3364. .notoowide:
  3365.  sub.w d7,d3
  3366. intofirststrip:
  3367.  
  3368.  move.w d3,d4
  3369. allintofirst:
  3370.  
  3371.  move.w startsmoothx,d3
  3372.  
  3373. tstwat:
  3374.  
  3375.  tst.b usewater
  3376.  bne texturedwater
  3377.  
  3378.  
  3379. ******************************
  3380. * BumpMap the floor/ceiling! *
  3381.  tst.b usebumps
  3382.  bne.s BumpMap
  3383. ******************************
  3384.  
  3385. ordinary:
  3386.  moveq #0,d0
  3387.  
  3388.  dbra d7,acrossscrn
  3389.  rts
  3390.  
  3391. usebumps: dc.w $0
  3392. smoothbumps: dc.w $0
  3393.  
  3394.  include "ab3:source/bumpmap.s"
  3395.  
  3396.  CNOP 0,4
  3397. backbefore:
  3398.  and.w d1,d5
  3399.  move.b (a0,d5.w*4),d0
  3400.  move.w (a1,d0.w*2),(a3)
  3401.  addq #4,a3
  3402.  add.w a4,d3
  3403.  addx.l d6,d5
  3404.  dbcs d7,acrossscrn
  3405.  dbcc d7,backbefore
  3406.  bcc.s past1
  3407.  add.w #256,d5 
  3408.  bra.s past1
  3409.  
  3410. acrossscrn:
  3411.  and.w d1,d5
  3412.  move.b (a0,d5.w*4),d0
  3413.  move.w (a1,d0.w*2),(a3)
  3414.  addq #4,a3
  3415.  add.w a4,d3
  3416.  addx.l d2,d5
  3417.  dbcs d7,acrossscrn
  3418.  dbcc d7,backbefore
  3419.  bcc.s past1
  3420.  add.w #256,d5 
  3421. past1:
  3422.  
  3423.  move.w d4,d7
  3424.  bne.s .notdoneyet
  3425.  CACHE_FREEZE_ON d2
  3426.  rts
  3427. .notdoneyet:
  3428.  
  3429.  cmp.w #32,d7
  3430.  ble.s .notoowide
  3431.  move.w #32,d7
  3432. .notoowide
  3433.  sub.w d7,d4  
  3434.  addq #4,a3
  3435.  
  3436.  dbra d7,acrossscrn
  3437.  CACHE_FREEZE_ON d2
  3438.  rts
  3439.  
  3440. waterpt: dc.l waterlist
  3441.  
  3442. waterlist:
  3443.  dc.l waterfile
  3444.  dc.l waterfile+2
  3445.  dc.l waterfile+256
  3446.  dc.l waterfile+256+2
  3447.  dc.l waterfile+512
  3448.  dc.l waterfile+512+2
  3449.  dc.l waterfile+768
  3450.  dc.l waterfile+768+2
  3451. ; dc.l waterfile+768
  3452. ; dc.l waterfile+512+2
  3453. ; dc.l waterfile+512
  3454. ; dc.l waterfile+256+2
  3455. ; dc.l waterfile+256
  3456. ; dc.l waterfile+2
  3457. endwaterlist:
  3458.  
  3459. watertouse: dc.l waterfile
  3460.  
  3461. wtan: dc.w 0
  3462. wateroff: dc.w 0
  3463.  
  3464. texturedwater:
  3465.  
  3466.  add.w wateroff,d5
  3467.  
  3468.  move.l #brightentab,a1
  3469.  move.w dst,d0
  3470.  clr.b d0
  3471.  add.w d0,d0
  3472.  adda.w d0,a1
  3473.  
  3474.  move.w dst,d0
  3475.  asl.w #7,d0
  3476.  add.w wtan,d0
  3477.  and.w #8191,d0
  3478.  move.l #SineTable,a0
  3479.  move.w (a0,d0.w),d0
  3480.  ext.l d0
  3481.  move.w dst,d3
  3482.  add.w #300,d3
  3483.  divs d3,d0
  3484.  asr.w #6,d0
  3485.  add.w #2,d0
  3486.  
  3487.  move.w dst,d3
  3488.  asr.w #7,d3
  3489.  add.w d3,d0
  3490.  
  3491.  muls #104*4,d0
  3492.  move.w d0,a6
  3493.  
  3494.  move.l watertouse,a0
  3495.  
  3496.  move.w startsmoothx,d3
  3497.  dbra d7,acrossscrnw
  3498.  rts
  3499.  
  3500. backbeforew:
  3501.  and.w d1,d5
  3502.  move.w (a0,d5.w*4),d0
  3503.  move.b 1(a3,a6.w),d0
  3504.  move.w (a1,d0.w*2),(a3)
  3505.  addq #4,a3
  3506.  add.w a4,d3
  3507.  addx.l d6,d5
  3508.  dbcs d7,acrossscrnw
  3509.  dbcc d7,backbeforew
  3510.  bcc.s past1w
  3511.  add.w #256,d5 
  3512.  bra.s past1w
  3513.  
  3514. acrossscrnw:
  3515.  and.w d1,d5
  3516.  move.w (a0,d5.w*4),d0
  3517.  move.b 1(a3,a6.w),d0
  3518.  move.w (a1,d0.w*2),(a3)
  3519.  addq #4,a3
  3520.  add.w a4,d3
  3521.  addx.l d2,d5
  3522.  dbcs d7,acrossscrnw
  3523.  dbcc d7,backbeforew
  3524.  bcc.s past1w
  3525.  add.w #256,d5 
  3526. past1w:
  3527.  
  3528.  move.w d4,d7
  3529.  bne.s .notdoneyet
  3530.  rts
  3531. .notdoneyet:
  3532.  
  3533.  cmp.w #32,d7
  3534.  ble.s .notoowide
  3535.  move.w #32,d7
  3536. .notoowide
  3537.  sub.w d7,d4  
  3538.  addq #4,a3
  3539.  
  3540.  dbra d7,acrossscrnw
  3541.  CACHE_FREEZE_ON d2
  3542.  rts
  3543.  
  3544. usewater: dc.w 0
  3545. startsmoothx: dc.w 0
  3546. startsmoothz: dc.w 0
  3547. drawit: dc.w 0
  3548.  
  3549. ********************************
  3550. *
  3551.  include "AB3:source/ObjDraw3.chipram"
  3552. *
  3553. ********************************
  3554.  
  3555. numframes:
  3556.  dc.w 0
  3557.  
  3558. alframe: dc.l Objects+4096
  3559.  
  3560. alan:
  3561.  dcb.l 6,256*65536
  3562.  dcb.l 6,256*2*65536
  3563.  dcb.l 6,256*5*65536
  3564.  dcb.l 6,256*6*65536
  3565. endalan:
  3566.  
  3567. alanptr: dc.l alan
  3568.  
  3569. Time2: dc.l 0
  3570. dispco:
  3571.  dc.w 0
  3572.  
  3573. KInt_Init    ;VBR Assumed $0
  3574.         move.l $68.w,OLDKINT
  3575.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  3576.         And.b    #$3f,$bfe201        Set Timers
  3577.         Move.b    #$7f,$bfed01
  3578.         Move.b    $bfed01,d0
  3579.         Move.b    #$88,$bfed01
  3580.         St.b    KInt_CCode        
  3581.         Move.b    #$a0,$bfee01        Start Timey Thing
  3582.         Rts                And return
  3583.  
  3584. OLDKINT: dc.l 0
  3585.  
  3586. KInt_Main    
  3587.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  3588.         Move.w    #8,$dff09a        Temp Disable Int.
  3589.         Move.w    $dff01e,d0        Intreqr
  3590.         And.w    #8,d0            Mask Out All X^ K_Int
  3591.     Beq    KInt_End            Not Keyboard Interrupt
  3592.         Lea    $bfed01,a6
  3593.         Move.w    #$8,$dff09c        Clear Int.Request
  3594.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  3595.         Ror.b    #1,d0            Roll to correct
  3596.         Not.b    d0            
  3597.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  3598. .HandShake    Move.b    #8,(a6)
  3599.         Move.b    #7,-$900(a6)
  3600.         Move.b    #0,-$800(a6)
  3601.         Move.b    #0,-$100(a6)
  3602.         Move.b    #$d1,$100(a6)        
  3603.         Tst.b    (a6)    
  3604. .wait        Btst    #0,(a6)
  3605.     Beq.s    .wait
  3606.         Move.b    #$a0,$100(a6)        
  3607.         Move.b    (a6),d0        
  3608.         Move.b    #$88,(a6)
  3609.         Lea    KeyMap,a1
  3610.         Moveq.w    #0,d0
  3611.         Move.b    KInt_CCode(pc),d0
  3612.     Bmi.s    KInt_KeyUp            neg if up 
  3613.  
  3614. KInt_KeyDown
  3615.         st (a1,d0.w)
  3616.     Bra    KInt_End
  3617.  
  3618. KInt_KeyUp
  3619.         And.w    #$7f,d0            Make code Positive
  3620.         clr.b (a1,d0.w)
  3621. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  3622.     
  3623.         Move.w    #$8008,$dff09a        Re-enable Int.
  3624.         Rte
  3625.  
  3626. KInt_CCode    Ds.b    1
  3627. KInt_Askey    Ds.b    1
  3628. KInt_OCode    Ds.w    1
  3629.  
  3630.  
  3631. PLR1_mouse_control
  3632.  jsr ReadMouse
  3633.  move.l #SineTable,a0
  3634.  move.w PLR1s_angspd,d1
  3635.  move.w PLR1s_angpos,d0
  3636.  move.w (a0,d0.w),PLR1s_sinval
  3637.  adda.w #2048,a0
  3638.  move.w (a0,d0.w),PLR1s_cosval
  3639.  
  3640.  move.l PLR1s_xspdval,d6
  3641.  move.l PLR1s_zspdval,d7
  3642.  
  3643.  neg.l d6
  3644.  ble.s .nobug1
  3645.  asr.l #1,d6
  3646.  add.l #1,d6
  3647.  bra.s .bug1
  3648. .nobug1
  3649.  asr.l #1,d6
  3650. .bug1:
  3651.  
  3652.  neg.l d7
  3653.  ble.s .nobug2
  3654.  asr.l #1,d7
  3655.  add.l #1,d7
  3656.  bra.s .bug2
  3657. .nobug2
  3658.  asr.l #1,d7
  3659. .bug2: 
  3660.  
  3661.  move.w PLR1s_sinval,d1
  3662.  move.w PLR1s_cosval,d2
  3663.  
  3664.  move.w d2,d4
  3665.  move.w d1,d5
  3666.  muls lrs,d4
  3667.  muls lrs,d5
  3668.  
  3669.  move.w ymouse,d3
  3670.  sub.w oldymouse,d3
  3671.  add.w d3,oldymouse
  3672.  asr.w #1,d3
  3673.  cmp.w #50,d3
  3674.  ble.s nofastfor
  3675.  move.w #50,d3
  3676. nofastfor:
  3677.  cmp.w #-50,d3
  3678.  bge.s nofastback
  3679.  move.w #-50,d3
  3680. nofastback:
  3681.  
  3682.  muls d3,d2
  3683.  muls d3,d1
  3684.  sub.l d4,d1
  3685.  add.l d5,d2
  3686.  
  3687.  sub.l d1,d6
  3688.  sub.l d2,d7
  3689.  add.l d6,PLR1s_xspdval
  3690.  add.l d7,PLR1s_zspdval
  3691.  move.l PLR1s_xspdval,d6
  3692.  move.l PLR1s_zspdval,d7
  3693.  add.l d6,PLR1s_xoff
  3694.  add.l d7,PLR1s_zoff
  3695.  
  3696.  tst.b PLR1_fire
  3697.  beq.s .firenotpressed
  3698. ; fire was pressed last time.
  3699.  btst #6,$bfe001
  3700.  bne.s .firenownotpressed
  3701. ; fire is still pressed this time.
  3702.  st PLR1_fire
  3703.  bra .doneplr1
  3704.  
  3705. .firenownotpressed:
  3706. ; fire has been released.
  3707.  clr.b PLR1_fire
  3708.  bra .doneplr1
  3709.  
  3710. .firenotpressed
  3711.  
  3712. ; fire was not pressed last frame...
  3713.  
  3714.  btst #6,$bfe001
  3715. ; if it has still not been pressed, go back above
  3716.  bne.s .firenownotpressed
  3717. ; fire was not pressed last time, and was this time, so has
  3718. ; been clicked.
  3719.  st PLR1_clicked
  3720.  st PLR1_fire
  3721.  
  3722. .doneplr1:
  3723.  move.l PLR1s_tyoff,d0
  3724.  move.l PLR1s_yoff,d1
  3725.  move.l PLR1s_yvel,d2
  3726.  sub.l d1,d0
  3727.  bgt.s .aboveground
  3728.  sub.l #1024,d2
  3729.  blt.s .notfast
  3730.  sub.l #2048,d2
  3731. .notfast:
  3732.  add.l d2,d1
  3733.  sub.l d2,d0
  3734.  blt.s .pastitall
  3735.  move.l #0,d2
  3736.  add.l d0,d1
  3737.  bra.s .pastitall
  3738.  
  3739. .aboveground:
  3740.  add.l d2,d1
  3741.  add.l #1024,d2
  3742. .pastitall:
  3743.  
  3744.  move.l d2,PLR1s_yvel
  3745.  move.l d1,PLR1s_yoff
  3746.  
  3747.  rts
  3748.  
  3749. PLR1_follow_path:
  3750.  
  3751.  move.l pathpt,a0
  3752.  move.w (a0),d1
  3753.  move.w d1,PLR1s_xoff
  3754.  move.w 2(a0),d1
  3755.  move.w d1,PLR1s_zoff
  3756.  move.w 4(a0),d0
  3757.  add.w d0,d0
  3758.  and.w #8190,d0
  3759.  move.w d0,PLR1_angpos
  3760.  
  3761.  move.w TempFrames,d0
  3762.  asl.w #3,d0
  3763.  adda.w d0,a0
  3764.  
  3765.  cmp.l #endpath,a0
  3766.  blt notrestartpath
  3767.  move.l #Path,a0
  3768. notrestartpath:
  3769.  move.l a0,pathpt
  3770.  
  3771.  rts
  3772.  
  3773. PLR1_keyboard_control:
  3774.  
  3775.  move.l #SineTable,a0
  3776.  move.w PLR1s_angpos,d0
  3777.  
  3778.  move.l #KeyMap,a5
  3779.  move.w #70,d1
  3780.  move.w #7,d2
  3781.  tst.b $61(a5)
  3782.  beq.s nofaster
  3783.  move.w #120,d1
  3784.  move.w #10,d2
  3785. nofaster:
  3786.  
  3787.  moveq #0,d4 
  3788. ; tst.b $67(a5)
  3789. ; bne.s slidelr
  3790.  
  3791.  tst.b $4f(a5)
  3792.  beq.s noleftturn
  3793.  sub.w d1,d0
  3794. noleftturn
  3795.  move.l #KeyMap,a5
  3796.  tst.b $4e(a5)
  3797.  beq.s norightturn
  3798.  add.w d1,d0
  3799. norightturn
  3800. ; bra.s noslide
  3801.  
  3802. slidelr:
  3803.  tst.b $39(a5)
  3804.  beq.s noleftslide
  3805.  move.w d2,d4
  3806.  asr.w #1,d4
  3807. noleftslide
  3808.  move.l #KeyMap,a5
  3809.  tst.b $3a(a5)
  3810.  beq.s norightslide
  3811.  sub.w d2,d4
  3812.  asr.w #1,d4
  3813. norightslide
  3814.   
  3815. noslide:
  3816.   
  3817.  and.w #8191,d0
  3818.  move.w d0,PLR1s_angpos
  3819.  
  3820.  move.w (a0,d0.w),PLR1s_sinval
  3821.  adda.w #2048,a0
  3822.  move.w (a0,d0.w),PLR1s_cosval
  3823.  
  3824.  move.l PLR1s_xspdval,d6
  3825.  move.l PLR1s_zspdval,d7
  3826.  
  3827.  neg.l d6
  3828.  ble.s .nobug1
  3829.  asr.l #1,d6
  3830.  add.l #1,d6
  3831.  bra.s .bug1
  3832. .nobug1
  3833.  asr.l #1,d6
  3834. .bug1:
  3835.  
  3836.  neg.l d7
  3837.  ble.s .nobug2
  3838.  asr.l #1,d7
  3839.  add.l #1,d7
  3840.  bra.s .bug2
  3841. .nobug2
  3842.  asr.l #1,d7
  3843. .bug2: 
  3844.  
  3845.  moveq #0,d3
  3846.  
  3847.  tst.b $4c(a5)
  3848.  beq.s noforward
  3849.  neg.w d2
  3850.  move.w d2,d3
  3851. noforward:
  3852.  tst.b $4d(a5)
  3853.  beq.s nobackward
  3854.  move.w d2,d3
  3855. nobackward:
  3856.  
  3857.  move.w PLR1s_sinval,d1
  3858.  muls d3,d1
  3859.  move.w PLR1s_cosval,d2
  3860.  muls d3,d2
  3861.  
  3862.  sub.l d1,d6
  3863.  sub.l d2,d7
  3864.  move.w PLR1s_sinval,d1
  3865.  muls d4,d1
  3866.  move.w PLR1s_cosval,d2
  3867.  muls d4,d2
  3868.  sub.l d2,d6
  3869.  add.l d1,d7
  3870.  
  3871.  add.l d6,PLR1s_xspdval
  3872.  add.l d7,PLR1s_zspdval
  3873.  move.l PLR1s_xspdval,d6
  3874.  move.l PLR1s_zspdval,d7
  3875.  add.l d6,PLR1s_xoff
  3876.  add.l d7,PLR1s_zoff
  3877.  
  3878.  tst.b PLR1_fire
  3879.  beq.s .firenotpressed
  3880. ; fire was pressed last time.
  3881.  tst.b $65(a5)
  3882.  beq.s .firenownotpressed
  3883. ; fire is still pressed this time.
  3884.  st PLR1_fire
  3885.  bra .doneplr1
  3886.  
  3887. .firenownotpressed:
  3888. ; fire has been released.
  3889.  clr.b PLR1_fire
  3890.  bra .doneplr1
  3891.  
  3892. .firenotpressed
  3893.  
  3894. ; fire was not pressed last frame...
  3895.  
  3896.  tst.b $65(a5)
  3897. ; if it has still not been pressed, go back above
  3898.  beq.s .firenownotpressed
  3899. ; fire was not pressed last time, and was this time, so has
  3900. ; been clicked.
  3901.  st PLR1_clicked
  3902.  st PLR1_fire
  3903.  
  3904. .doneplr1:
  3905.  
  3906.  move.l PLR1s_tyoff,d0
  3907.  move.l PLR1s_yoff,d1
  3908.  move.l PLR1s_yvel,d2
  3909.  sub.l d1,d0
  3910.  bgt.s .aboveground
  3911.  sub.l #1024,d2
  3912.  blt.s .notfast
  3913.  sub.l #2048,d2
  3914. .notfast:
  3915.  add.l d2,d1
  3916.  sub.l d2,d0
  3917.  blt.s .pastitall
  3918.  move.l #0,d2
  3919.  add.l d0,d1
  3920.  bra.s .pastitall
  3921.  
  3922. .aboveground:
  3923.  add.l d2,d1
  3924.  add.l #1024,d2
  3925. .pastitall:
  3926.  
  3927.  move.l d2,PLR1s_yvel
  3928.  move.l d1,PLR1s_yoff
  3929.  
  3930.  rts
  3931.  
  3932.  
  3933. Chan0inter:
  3934.  
  3935.  move.w #$0010,$dff000+intreq
  3936.  
  3937.  addq.w #1,FramesToDraw
  3938.  tst.b counting
  3939.  beq nostopcounter
  3940.  JSR STOPCOUNTNOADD
  3941. nostopcounter:
  3942.  movem.l d0-d7/a0-a6,-(a7)
  3943.  
  3944.  
  3945.  tst.b oktodisplay
  3946.  beq dontshowtime
  3947.  clr.b oktodisplay
  3948. ; subq.w #1,dispco
  3949. ; bgt dontshowtime
  3950. ; move.w #10,dispco
  3951.  
  3952.  move.l #TimerScr+10,a0
  3953.  move.l TimeCount,d0
  3954.  bge.s timenotneg
  3955.  move.l #1111*256,d0
  3956. timenotneg:
  3957.  asr.l #8,d0
  3958.  move.l #digits,a1
  3959.  move.w #7,d2
  3960. digitlop
  3961.  divs #10,d0
  3962.  swap d0
  3963.  lea (a1,d0.w*8),a2
  3964.  move.b (a2)+,(a0)
  3965.  move.b (a2)+,24(a0)
  3966.  move.b (a2)+,24*2(a0)
  3967.  move.b (a2)+,24*3(a0)
  3968.  move.b (a2)+,24*4(a0)
  3969.  move.b (a2)+,24*5(a0)
  3970.  move.b (a2)+,24*6(a0)
  3971.  move.b (a2)+,24*7(a0)
  3972.  subq #1,a0
  3973.  swap d0
  3974.  ext.l d0
  3975.  dbra d2,digitlop
  3976.  
  3977.  move.l #TimerScr+10+24*10,a0
  3978.  move.l NumTimes,d0
  3979.  move.l #digits,a1
  3980.  move.w #3,d2
  3981. digitlop2
  3982.  divs #10,d0
  3983.  swap d0
  3984.  lea (a1,d0.w*8),a2
  3985.  move.b (a2)+,(a0)
  3986.  move.b (a2)+,24(a0)
  3987.  move.b (a2)+,24*2(a0)
  3988.  move.b (a2)+,24*3(a0)
  3989.  move.b (a2)+,24*4(a0)
  3990.  move.b (a2)+,24*5(a0)
  3991.  move.b (a2)+,24*6(a0)
  3992.  move.b (a2)+,24*7(a0)
  3993.  subq #1,a0
  3994.  swap d0
  3995.  ext.l d0
  3996.  dbra d2,digitlop2
  3997.  
  3998.  move.l #TimerScr+10+24*20,a0
  3999.  moveq #0,d0
  4000.  move.w FrameNum,d0
  4001.  move.l #digits,a1
  4002.  move.w #2,d2
  4003. digitlop3
  4004.  divs #10,d0
  4005.  swap d0
  4006.  lea (a1,d0.w*8),a2
  4007.  move.b (a2)+,(a0)
  4008.  move.b (a2)+,24(a0)
  4009.  move.b (a2)+,24*2(a0)
  4010.  move.b (a2)+,24*3(a0)
  4011.  move.b (a2)+,24*4(a0)
  4012.  move.b (a2)+,24*5(a0)
  4013.  move.b (a2)+,24*6(a0)
  4014.  move.b (a2)+,24*7(a0)
  4015.  subq #1,a0
  4016.  swap d0
  4017.  ext.l d0
  4018.  dbra d2,digitlop3
  4019.  
  4020. dontshowtime:
  4021.  
  4022.  move.w Robotanimpos,d0
  4023.  add.w #6*38,d0
  4024.  cmp.w #6*38*64,d0
  4025.  blt.s norebot
  4026.  move.w #0,d0
  4027. norebot:
  4028.  move.w d0,Robotanimpos
  4029.  
  4030.  tst.w d0
  4031.  seq d1
  4032.  cmp.w #6*32*38,d0
  4033.  seq d2
  4034.  or.b d2,d1
  4035.  or.b d1,clump
  4036.  
  4037.  move.w Robotarmpos,d0
  4038.  add.w #6*14,d0
  4039.  cmp.w #6*14*64,d0
  4040.  blt.s norebot2
  4041.  move.w #0,d0
  4042. norebot2:
  4043.  move.w d0,Robotarmpos
  4044.  
  4045.  move.l alanptr,a0
  4046.  move.l (a0)+,alframe
  4047.  cmp.l #endalan,a0
  4048.  blt.s nostartalan
  4049.  move.l #alan,a0
  4050. nostartalan:
  4051.  move.l a0,alanptr
  4052.  
  4053.  move.l #$dff000,a6
  4054.  
  4055.  cmp.b #'4',option+2
  4056.  bne.s nomuckabout
  4057.  
  4058.  move.w #$0,d0 
  4059.  tst.b NoiseMade0
  4060.  beq.s noturnoff0
  4061.  move.w #1,d0
  4062. noturnoff0:
  4063.  tst.b NoiseMade1
  4064.  beq.s noturnoff1
  4065.  or.w #2,d0
  4066. noturnoff1:
  4067.  tst.b NoiseMade2
  4068.  beq.s noturnoff2
  4069.  or.w #4,d0
  4070. noturnoff2:
  4071.  tst.b NoiseMade3
  4072.  beq.s noturnoff3
  4073.  or.w #8,d0
  4074. noturnoff3:
  4075.  move.w d0,dmacon(a6)
  4076.  
  4077. nomuckabout:
  4078.  
  4079.  tst.b PLR1MOUSE
  4080.  beq.s PLR1_nomouse
  4081.  bsr PLR1_mouse_control
  4082. PLR1_nomouse:
  4083.  tst.b PLR1KEYS
  4084.  beq.s PLR1_nokeys
  4085.  bsr PLR1_keyboard_control
  4086. PLR1_nokeys:
  4087.  tst.b PLR1PATH
  4088.  beq.s PLR1_nopath
  4089.  bsr PLR1_follow_path
  4090. PLR1_nopath:
  4091.  
  4092.  bclr.b #4,Conditions
  4093.  move.l #KeyMap,a5
  4094.  tst.b $40(a5)
  4095.  beq.s nospace
  4096.  bset.b #4,Conditions
  4097. nospace:
  4098.  
  4099.  tst.b PLR2_fire
  4100.  beq.s firenotpressed2
  4101. ; fire was pressed last time.
  4102.  btst #7,$bfe001
  4103.  bne.s firenownotpressed2
  4104. ; fire is still pressed this time.
  4105.  st PLR2_fire
  4106.  bra dointer
  4107.  
  4108. firenownotpressed2:
  4109. ; fire has been released.
  4110.  clr.b PLR2_fire
  4111.  bra dointer
  4112.  
  4113. firenotpressed2
  4114.  
  4115. ; fire was not pressed last frame...
  4116.  
  4117.  btst #7,$bfe001
  4118. ; if it has still not been pressed, go back above
  4119.  bne.s firenownotpressed2
  4120. ; fire was not pressed last time, and was this time, so has
  4121. ; been clicked.
  4122.  st PLR2_clicked
  4123.  st PLR2_fire
  4124.  
  4125. dointer
  4126.  
  4127.  cmp.b #'4',option+2
  4128.  beq fourchannel
  4129.  
  4130.  btst #7,$dff000+intreqrl
  4131.  bne.s newsampbitl
  4132.  
  4133.  movem.l (a7)+,d0-d7/a0-a6
  4134.  tst.b counting
  4135.  beq .nostartcounter
  4136.  JSR STARTCOUNT
  4137. .nostartcounter:
  4138. noneed:
  4139.  
  4140.  rte
  4141.  
  4142. swappedem: dc.w 0
  4143.  
  4144. newsampbitl:
  4145.  
  4146.  move.w #$820f,$dff000+dmacon
  4147.  
  4148.  move.w #$80,$dff000+intreq
  4149.  
  4150.  move.l pos0,a0
  4151.  move.l pos1,a1
  4152.  
  4153.  move.l #tab,a2
  4154.  
  4155.  moveq #0,d0
  4156.  moveq #0,d1
  4157.  move.b vol0left,d0
  4158.  move.b vol1left,d1
  4159.  cmp.b d1,d0
  4160.  bge.s fbig0
  4161.  
  4162. ; d1 is bigger so scale d0 and use d1
  4163. ; as audiochannel volume.
  4164.  
  4165.  exg a0,a1
  4166.  asl.w #6,d0
  4167.  divs d1,d0
  4168.  lsl.w #8,d0
  4169.  adda.w d0,a2
  4170.  move.w d1,$dff0a8
  4171.  bra.s donechan0
  4172.  
  4173. fbig0:
  4174.  tst.w d0
  4175.  beq.s donechan0
  4176.  asl.w #6,d1
  4177.  divs d0,d1
  4178.  lsl.w #8,d1
  4179.  adda.w d1,a2
  4180.  move.w d0,$dff0a8
  4181.  
  4182. donechan0:
  4183.  
  4184.  
  4185.  move.l Aupt0,a3
  4186.  move.l a3,$dff0a0
  4187.  move.l Auback0,Aupt0
  4188.  move.l a3,Auback0
  4189.  
  4190.  move.l Auback0,a3
  4191.  
  4192.  moveq #0,d0
  4193.  moveq #0,d1
  4194.  moveq #0,d2
  4195.  moveq #0,d3
  4196.  moveq #0,d4
  4197.  moveq #0,d5
  4198.  move.w #49,d7
  4199. loop:
  4200.  move.l (a0)+,d0
  4201.  move.b (a1)+,d1
  4202.  move.b (a1)+,d2
  4203.  move.b (a1)+,d3
  4204.  move.b (a1)+,d4
  4205.  move.b (a2,d3.w),d5
  4206.  swap d5
  4207.  move.b (a2,d1.w),d5
  4208.  asl.l #8,d5
  4209.  move.b (a2,d2.w),d5
  4210.  swap d5
  4211.  move.b (a2,d4.w),d5
  4212.  add.l d5,d0
  4213.  move.l d0,(a3)+
  4214.  dbra d7,loop
  4215.  
  4216.  move.l pos0,a0
  4217.  move.l pos1,a1
  4218.  
  4219.  move.l Aupt1,a3
  4220.  move.l a3,$dff0b0
  4221.  move.l Auback1,Aupt1
  4222.  move.l a3,Auback1
  4223.  
  4224.  move.l #tab,a2
  4225.  
  4226.  moveq #0,d0
  4227.  moveq #0,d1
  4228.  move.b vol0right,d0
  4229.  move.b vol1right,d1
  4230.  cmp.b d1,d0
  4231.  slt swappedem
  4232.  bge.s fbig1
  4233.  
  4234. ; d1 is bigger so scale d0 and use d1
  4235. ; as audiochannel volume.
  4236.  
  4237.  exg a0,a1
  4238.  asl.w #6,d0
  4239.  divs d1,d0
  4240.  lsl.w #8,d0
  4241.  adda.w d0,a2
  4242.  move.w d1,$dff0b8
  4243.  bra.s donechan1
  4244.  
  4245. fbig1:
  4246.  tst.w d0
  4247.  beq.s donechan1
  4248.  asl.w #6,d1
  4249.  divs d0,d1
  4250.  lsl.w #8,d1
  4251.  adda.w d1,a2
  4252.  move.w d0,$dff0b8
  4253.  
  4254. donechan1:
  4255.  moveq #0,d0
  4256.  moveq #0,d1
  4257.  moveq #0,d2
  4258.  moveq #0,d3
  4259.  moveq #0,d4
  4260.  moveq #0,d5
  4261.  move.w #49,d7
  4262. loop2:
  4263.  move.l (a0)+,d0
  4264.  move.b (a1)+,d1
  4265.  move.b (a1)+,d2
  4266.  move.b (a1)+,d3
  4267.  move.b (a1)+,d4
  4268.  move.b (a2,d3.w),d5
  4269.  swap d5
  4270.  move.b (a2,d1.w),d5
  4271.  asl.l #8,d5
  4272.  move.b (a2,d2.w),d5
  4273.  swap d5
  4274.  move.b (a2,d4.w),d5
  4275.  add.l d5,d0
  4276.  move.l d0,(a3)+
  4277.  dbra d7,loop2
  4278.  
  4279.  tst.b swappedem
  4280.  beq.s ok01
  4281.  exg a0,a1
  4282. ok01:
  4283.  
  4284.  cmp.l Samp0end,a0
  4285.  blt.s notoffendsamp1
  4286.  move.l #bass,a0
  4287.  move.l #bassend,Samp0end
  4288.  move.b #64,vol0left
  4289.  move.b #64,vol0right
  4290.  tst.b backbeat
  4291.  bne.s playbeat
  4292.  move.l #empty,a0
  4293.  move.l #emptyend,Samp0end
  4294.  move.b #0,vol0left
  4295.  move.b #0,vol0right
  4296. playbeat:
  4297. notoffendsamp1:
  4298.  
  4299.  cmp.l Samp1end,a1
  4300.  blt.s notoffendsamp2
  4301.  move.l #empty,a1
  4302.  move.l #emptyend,Samp1end
  4303.  move.b #0,vol1left
  4304.  move.b #0,vol1right
  4305. notoffendsamp2:
  4306.  
  4307.  move.l a0,pos0
  4308.  move.l a1,pos1
  4309.  
  4310. ******************* Other two channels
  4311.  
  4312.  move.l pos2,a0
  4313.  move.l pos3,a1
  4314.  
  4315.  move.l #tab,a2
  4316.  
  4317.  moveq #0,d0
  4318.  moveq #0,d1
  4319.  move.b vol2left,d0
  4320.  move.b vol3left,d1
  4321.  cmp.b d1,d0
  4322.  bge.s fbig2
  4323.  
  4324. ; d1 is bigger so scale d0 and use d1
  4325. ; as audiochannel volume.
  4326.  
  4327.  exg a0,a1
  4328.  asl.w #6,d0
  4329.  divs d1,d0
  4330.  lsl.w #8,d0
  4331.  adda.w d0,a2
  4332.  move.w d1,$dff0d8
  4333.  bra.s donechan2
  4334.  
  4335. fbig2:
  4336.  tst.w d0
  4337.  beq.s donechan2
  4338.  asl.w #6,d1
  4339.  divs d0,d1
  4340.  lsl.w #8,d1
  4341.  adda.w d1,a2
  4342.  move.w d0,$dff0d8
  4343.  
  4344. donechan2:
  4345.  
  4346.  move.l Aupt2,a3
  4347.  move.l a3,$dff0d0
  4348.  move.l Auback2,Aupt2
  4349.  move.l a3,Auback2
  4350.  
  4351.  moveq #0,d0
  4352.  moveq #0,d1
  4353.  moveq #0,d2
  4354.  moveq #0,d3
  4355.  moveq #0,d4
  4356.  moveq #0,d5
  4357.  move.w #49,d7
  4358. loop3:
  4359.  move.l (a0)+,d0
  4360.  move.b (a1)+,d1
  4361.  move.b (a1)+,d2
  4362.  move.b (a1)+,d3
  4363.  move.b (a1)+,d4
  4364.  move.b (a2,d3.w),d5
  4365.  swap d5
  4366.  move.b (a2,d1.w),d5
  4367.  asl.l #8,d5
  4368.  move.b (a2,d2.w),d5
  4369.  swap d5
  4370.  move.b (a2,d4.w),d5
  4371.  add.l d5,d0
  4372.  move.l d0,(a3)+
  4373.  dbra d7,loop3
  4374.  
  4375.  move.l pos2,a0
  4376.  move.l pos3,a1
  4377.  
  4378.  move.l Aupt3,a3
  4379.  move.l a3,$dff0c0
  4380.  move.l Auback3,Aupt3
  4381.  move.l a3,Auback3
  4382.  
  4383.  move.l #tab,a2
  4384.  
  4385.  moveq #0,d0
  4386.  moveq #0,d1
  4387.  move.b vol2right,d0
  4388.  move.b vol3right,d1
  4389.  cmp.b d1,d0
  4390.  slt.s swappedem
  4391.  bge.s fbig3
  4392.  
  4393.  exg a0,a1
  4394.  asl.w #6,d0
  4395.  divs d1,d0
  4396.  lsl.w #8,d0
  4397.  adda.w d0,a2
  4398.  move.w d1,$dff0c8
  4399.  bra.s donechan3
  4400.  
  4401. fbig3:
  4402.  tst.w d0
  4403.  beq.s donechan3
  4404.  asl.w #6,d1
  4405.  divs d0,d1
  4406.  lsl.w #8,d1
  4407.  adda.w d1,a2
  4408.  move.w d0,$dff0c8
  4409. donechan3:
  4410.  
  4411.  moveq #0,d0
  4412.  moveq #0,d1
  4413.  moveq #0,d2
  4414.  moveq #0,d3
  4415.  moveq #0,d4
  4416.  moveq #0,d5
  4417.  move.w #49,d7
  4418. loop4:
  4419.  move.l (a0)+,d0
  4420.  move.b (a1)+,d1
  4421.  move.b (a1)+,d2
  4422.  move.b (a1)+,d3
  4423.  move.b (a1)+,d4
  4424.  move.b (a2,d3.w),d5
  4425.  swap d5
  4426.  move.b (a2,d1.w),d5
  4427.  asl.l #8,d5
  4428.  move.b (a2,d2.w),d5
  4429.  swap d5
  4430.  move.b (a2,d4.w),d5
  4431.  add.l d5,d0
  4432.  move.l d0,(a3)+
  4433.  dbra d7,loop4
  4434.  
  4435.  tst.b swappedem
  4436.  beq.s ok23
  4437.  exg a0,a1
  4438. ok23:
  4439.  
  4440.  cmp.l Samp2end,a0
  4441.  blt.s notoffendsamp3
  4442.  move.l #empty,a0
  4443.  move.l #emptyend,Samp2end
  4444.  move.b #0,vol2left
  4445.  move.b #0,vol2right
  4446. notoffendsamp3:
  4447.  
  4448.  cmp.l Samp3end,a1
  4449.  blt.s notoffendsamp4
  4450.  move.l #empty,a1
  4451.  move.l #emptyend,Samp3end
  4452.  move.b #0,vol3left
  4453.  move.b #0,vol3right
  4454. notoffendsamp4:
  4455.  
  4456.  move.l a0,pos2
  4457.  move.l a1,pos3
  4458.  
  4459.  movem.l (a7)+,d0-d7/a0-a6
  4460.  tst.b counting
  4461.  beq .nostartcounter
  4462.  JSR STARTCOUNT
  4463. .nostartcounter:
  4464.  
  4465.  rte
  4466.  
  4467. ***********************************
  4468. * 4 channel sound routine
  4469. ***********************************
  4470.  
  4471. bassloop:
  4472.  dc.l bass
  4473.  dc.l bass2
  4474.  dc.l bass
  4475.  dc.l bass3
  4476. endbass:
  4477. bassptr: dc.l bassloop
  4478.  
  4479. fourchannel:
  4480.  
  4481.  move.l #$dff000,a6
  4482.  
  4483.  btst #7,intreqrl(a6)
  4484.  beq.s nofinish0
  4485.  tst.b backbeat
  4486.  beq.s nobeat
  4487.  
  4488.  move.l bassptr,a0
  4489.  move.l (a0)+,$a0(a6)
  4490.  move.w #15900/2,$a4(a6)
  4491.  move.w #64,$a8(a6)
  4492.  cmp.l #endbass,a0
  4493.  blt.s norestbass
  4494.  move.l #bassloop,a0
  4495. norestbass
  4496.  move.l a0,bassptr
  4497.  bra somebeat
  4498. nobeat:
  4499.  move.l #null,$a0(a6)
  4500.  move.w #100,$a4(a6)
  4501.  
  4502. somebeat:
  4503.  move.w #$0080,intreq(a6)
  4504. nofinish0:
  4505.  
  4506.  tst.b NoiseMade0p
  4507.  beq.s NoChan0sound
  4508.  
  4509.  move.l Samp0end,d0
  4510.  move.l pos0,d1
  4511.  sub.l d1,d0
  4512.  asr.w #1,d0
  4513.  move.w d0,$a4(a6)
  4514.  move.l d1,$a0(a6)
  4515.  move.w #$8201,dmacon(a6)
  4516.  moveq #0,d0
  4517.  move.b vol0left,d0
  4518.  add.b vol0right,d0
  4519.  asr.b #1,d0
  4520.  move.w d0,$a8(a6)
  4521.  
  4522. NoChan0sound:
  4523.  
  4524.  btst #0,intreqr(a6)
  4525.  beq.s nofinish1
  4526.  move.l #null,$b0(a6)
  4527.  move.w #100,$b4(a6)
  4528.  move.w #$0100,intreq(a6)
  4529. nofinish1:
  4530.  
  4531.  tst.b NoiseMade1p
  4532.  beq.s NoChan1sound
  4533.  
  4534.  move.l Samp1end,d0
  4535.  move.l pos1,d1
  4536.  sub.l d1,d0
  4537.  asr.w #1,d0
  4538.  move.w d0,$b4(a6)
  4539.  move.l d1,$b0(a6)
  4540.  move.w #$8202,dmacon(a6)
  4541.  moveq #0,d0
  4542.  move.b vol1left,d0
  4543.  add.b vol1right,d0
  4544.  asr.b #1,d0
  4545.  move.w d0,$b8(a6)
  4546.  
  4547. NoChan1sound:
  4548.  
  4549.  
  4550.  btst #1,intreqr(a6)
  4551.  beq.s nofinish2
  4552.  move.l #null,$c0(a6)
  4553.  move.w #100,$c4(a6)
  4554.  move.w #$0200,intreq(a6)
  4555. nofinish2:
  4556.  
  4557.  tst.b NoiseMade2p
  4558.  beq.s NoChan2sound
  4559.  
  4560.  move.l Samp2end,d0
  4561.  move.l pos2,d1
  4562.  sub.l d1,d0
  4563.  asr.w #1,d0
  4564.  move.w d0,$c4(a6)
  4565.  move.l d1,$c0(a6)
  4566.  move.w #$8204,dmacon(a6)
  4567.  moveq #0,d0
  4568.  move.b vol2left,d0
  4569.  add.b vol2right,d0
  4570.  asr.b #1,d0
  4571.  move.w d0,$c8(a6)
  4572.  
  4573. NoChan2sound:
  4574.  
  4575.  btst #2,intreqr(a6)
  4576.  beq.s nofinish3
  4577.  move.l #null,$d0(a6)
  4578.  move.w #100,$d4(a6)
  4579.  move.w #$0400,intreq(a6)
  4580. nofinish3:
  4581.  
  4582.  tst.b NoiseMade3p
  4583.  beq.s NoChan3sound
  4584.  
  4585.  move.l Samp3end,d0
  4586.  move.l pos3,d1
  4587.  sub.l d1,d0
  4588.  asr.w #1,d0
  4589.  move.w d0,$d4(a6)
  4590.  move.l d1,$d0(a6)
  4591.  move.w #$8208,dmacon(a6)
  4592.  moveq #0,d0
  4593.  move.b vol2left,d0
  4594.  add.b vol2right,d0
  4595.  asr.b #1,d0
  4596.  move.w d0,$d8(a6)
  4597.  
  4598. NoChan3sound:
  4599.  
  4600. nomorechannels:
  4601.  
  4602.  move.l NoiseMade0,NoiseMade0p
  4603.  move.l #0,NoiseMade0
  4604.  
  4605.  movem.l (a7)+,d0-d7/a0-a6
  4606.  tst.b counting
  4607.  beq .nostartcounter
  4608.  JSR STARTCOUNT
  4609. .nostartcounter:
  4610.  
  4611.  rte
  4612.  
  4613. backbeat: dc.w 0
  4614.  
  4615. Samp0end: dc.l emptyend
  4616. Samp1end: dc.l emptyend
  4617. Samp2end: dc.l emptyend
  4618. Samp3end: dc.l emptyend
  4619.  
  4620. Aupt0: dc.l null
  4621. Auback0: dc.l null+500
  4622. Aupt2: dc.l null3
  4623. Auback2: dc.l null3+500
  4624. Aupt3: dc.l null4
  4625. Auback3: dc.l null4+500
  4626. Aupt1: dc.l null2
  4627. Auback1: dc.l null2+500
  4628.  
  4629. NoiseMade0: dc.b 0
  4630. NoiseMade1: dc.b 0
  4631. NoiseMade2: dc.b 0
  4632. NoiseMade3: dc.b 0
  4633. NoiseMade0p: dc.b 0
  4634. NoiseMade1p: dc.b 0
  4635. NoiseMade2p: dc.b 0
  4636. NoiseMade3p: dc.b 0
  4637.  
  4638. empty: ds.l 100
  4639. emptyend:
  4640.  
  4641. **************************************
  4642. * I want a routine to calculate all the
  4643. * info needed for the sound player to
  4644. * work, given say position of noise, volume
  4645. * and sample number.
  4646.  
  4647. Samplenum: dc.w 0
  4648. Noisex: dc.w 0
  4649. Noisez: dc.w 0
  4650. Noisevol: dc.w 0
  4651. chanpick: dc.w 0
  4652.  
  4653. MakeSomeNoise:
  4654.  
  4655.  move.w Noisex,d1
  4656.  muls d1,d1
  4657.  move.w Noisez,d2
  4658.  muls d2,d2
  4659.  move.w #64,d3
  4660.  moveq #1,d0
  4661.  add.l d1,d2
  4662.  beq pastcalc
  4663.  
  4664.  move.w #31,d0
  4665. .findhigh
  4666.  btst d0,d2
  4667.  bne .foundhigh
  4668.  dbra d0,.findhigh
  4669. .foundhigh
  4670.  asr.w #1,d0
  4671.  clr.l d3
  4672.  bset d0,d3
  4673.  move.l d3,d0
  4674.  
  4675.  move.w d0,d3
  4676.  muls d3,d3    ; x*x
  4677.  sub.l d2,d3    ; x*x-a
  4678.  asr.l #1,d3    ; (x*x-a)/2
  4679.  divs d0,d3    ; (x*x-a)/2x
  4680.  sub.w d3,d0    ; second approx
  4681.  bgt .stillnot0
  4682.  move.w #1,d0
  4683. .stillnot0
  4684.  
  4685.  move.w d0,d3
  4686.  muls d3,d3
  4687.  sub.l d2,d3
  4688.  asr.l #1,d3
  4689.  divs d0,d3
  4690.  sub.w d3,d0    ; second approx
  4691.  bgt .stillnot02
  4692.  move.w #1,d0
  4693. .stillnot02
  4694.  
  4695.  move.w #64,d3
  4696.  muls Noisevol,d3
  4697.  asr.w #1,d0
  4698.  addq #1,d0
  4699.  divs d0,d3
  4700.  
  4701.  cmp.w #64,d3
  4702.  ble.s notooloud
  4703.  move.w #64,d3
  4704. notooloud:
  4705.  
  4706. pastcalc:
  4707.  
  4708.     ; d3 contains volume of noise.
  4709.     
  4710.  move.w d3,d4
  4711.  
  4712.  move.w d3,d2
  4713.  muls Noisex,d2
  4714.  add.w d0,d0
  4715.  divs d0,d2
  4716.  
  4717.  bgt.s quietleft
  4718.  add.w d2,d4
  4719.  bge.s donequiet
  4720.  move.w #0,d4
  4721.  bra.s donequiet
  4722. quietleft:
  4723.  sub.w d2,d3
  4724.  bge.s donequiet
  4725.  move.w #0,d3
  4726. donequiet:
  4727.  
  4728. ; d3=leftvol?
  4729. ; d4=rightvol?
  4730.  
  4731. Recordednoise:
  4732.  move.l #SampleList,a3
  4733.  
  4734.  tst.b chanpick
  4735.  seq NoiseMade0
  4736.  beq.s chan0
  4737.  cmp.b #1,chanpick
  4738.  seq NoiseMade1
  4739.  beq chan1
  4740.  cmp.b #2,chanpick
  4741.  seq NoiseMade2
  4742.  beq chan2
  4743.  st NoiseMade3
  4744.  
  4745.  move.w Samplenum,d0
  4746.  move.l (a3,d0.w*8),a1
  4747.  move.l 4(a3,d0.w*8),a2
  4748.  
  4749.  move.b d3,vol3left
  4750.  move.b d4,vol3right
  4751.  move.l a1,pos3
  4752.  move.l a2,Samp3end
  4753.  
  4754.  rts
  4755.  
  4756. chan0: 
  4757.  move.w Samplenum,d0
  4758.  move.l (a3,d0.w*8),a1
  4759.  move.l 4(a3,d0.w*8),a2
  4760.  move.l a1,pos0
  4761.  move.l a2,Samp0end
  4762.  move.b d3,vol0left
  4763.  move.b d4,vol0right
  4764.  
  4765.  rts
  4766.  
  4767. chan1:
  4768.  
  4769.  move.w Samplenum,d0
  4770.  move.l (a3,d0.w*8),a1
  4771.  move.l 4(a3,d0.w*8),a2
  4772.  move.b d3,vol1left
  4773.  move.b d4,vol1right
  4774.  move.l a1,pos1
  4775.  move.l a2,Samp1end
  4776.  
  4777.  rts
  4778.  
  4779. chan2: 
  4780.  move.w Samplenum,d0
  4781.  move.l (a3,d0.w*8),a1
  4782.  move.l 4(a3,d0.w*8),a2
  4783.  move.l a1,pos2
  4784.  move.l a2,Samp2end
  4785.  move.b d3,vol2left
  4786.  move.b d4,vol2right
  4787.  
  4788.  rts
  4789.  
  4790. SampleList
  4791.  dc.l Scream,EndScream
  4792.  dc.l Shoot,EndShoot
  4793.  dc.l Munch,EndMunch
  4794.  dc.l PooGun,EndPooGun
  4795.  dc.l Collect,EndCollect
  4796.  dc.l DoorNoise,EndDoorNoise
  4797.  dc.l bass,bassend
  4798.  dc.l Stomp,EndStomp
  4799.  dc.l LowScream,EndLowScream
  4800.  dc.l BaddieGun,EndBaddieGun
  4801.  
  4802. saveinters:  
  4803.  dc.w 0
  4804.  
  4805. z: dc.w 10
  4806.  
  4807. notifplaying:
  4808.  dc.w 0
  4809.  
  4810. audpos1: dc.w 0
  4811. audpos1b: dc.w 0
  4812. audpos2: dc.w 0
  4813. audpos2b: dc.w 0
  4814. audpos3: dc.w 0
  4815. audpos3b: dc.w 0
  4816. audpos4: dc.w 0
  4817. audpos4b: dc.w 0
  4818.  
  4819. vol0left: dc.w 0
  4820. vol0right: dc.w 0
  4821. vol1left: dc.w 0
  4822. vol1right: dc.w 0
  4823. vol2left: dc.w 0
  4824. vol2right: dc.w 0
  4825. vol3left: dc.w 0
  4826. vol3right: dc.w 0
  4827.  
  4828. pos: dc.l 0
  4829.  
  4830. pos0: dc.l empty
  4831. pos1: dc.l empty
  4832. pos2: dc.l empty
  4833. pos3: dc.l empty
  4834.  
  4835.  
  4836. numtodo dc.w 0
  4837.  
  4838. npt: dc.w 0
  4839.  
  4840. pretab:
  4841. val SET 0
  4842.  REPT 128
  4843.  dc.b val
  4844. val SET val+1
  4845.  ENDR
  4846. val SET -128
  4847.  REPT 128
  4848.  dc.b val
  4849. val SET val+1
  4850.  ENDR 
  4851.  
  4852. tab:
  4853.  ds.b 256*65
  4854.  
  4855.  
  4856. test: dc.l 0
  4857.  ds.l 30
  4858.  
  4859.  even
  4860. ConstCols:
  4861.  incbin "ConstCols"
  4862.  even
  4863. Smoothscalecols:
  4864. ; incbin "smoothbumppalscaled"
  4865.  even
  4866. SmoothTile:
  4867. ; incbin "smoothbumptile"
  4868.  even
  4869. Bumpscalecols:
  4870. ; incbin "Bumppalscaled"
  4871.  even
  4872. Bumptile:
  4873. ; incbin "bumptile"
  4874.  even
  4875. scalecols: incbin "bytepixpalscaled"
  4876.  even
  4877. floorscalecols: incbin "floorpalscaled"
  4878.  even
  4879. walltiles:
  4880.  incbin "bytepixfile"
  4881.  even
  4882. floortile:
  4883.  incbin "floortile" 
  4884.  even
  4885. wallrouts:
  4886. ; incbin "2x2WallDraw" 
  4887.  CNOP 0,64
  4888. BackPicture:
  4889.  incbin "backfile"
  4890. EndBackPicture:
  4891.  
  4892. drawpt: dc.l colbars2
  4893. olddrawpt: dc.l colbars
  4894. frompt: dc.l 0 
  4895.  
  4896. SineTable:
  4897.  incbin "bigsine"
  4898.  
  4899. angpos: dc.w 0
  4900. angspd: dc.w 0
  4901. flooryoff: dc.w 0
  4902. xoff: dc.l 0
  4903. yoff: dc.l 0
  4904. yvel: dc.l 0
  4905. zoff: dc.l 0
  4906. tyoff: dc.l 0
  4907. xspdval: dc.l 0
  4908. zspdval: dc.l 0
  4909. Zone: dc.w 0
  4910.  
  4911. PLR1: dc.b $ff
  4912.  even
  4913. PLR1_cosval: dc.w 0
  4914. PLR1_sinval: dc.w 0
  4915. PLR1_angpos: dc.w 0
  4916. PLR1_angspd: dc.w 0
  4917. PLR1_xoff: dc.l 0
  4918. PLR1_yoff: dc.l 0
  4919. PLR1_yvel: dc.l 0
  4920. PLR1_zoff: dc.l 0
  4921. PLR1_tyoff: dc.l 0
  4922. PLR1_xspdval: dc.l 0
  4923. PLR1_zspdval: dc.l 0
  4924. PLR1_Zone: dc.w 0
  4925. PLR1_Roompt: dc.l 0
  4926. PLR1_OldRoompt: dc.l 0
  4927. PLR1_PointsToRotatePtr: dc.l 0
  4928. PLR1_ListOfGraphRooms: dc.l 0
  4929. PLR1_oldxoff: dc.l 0
  4930. PLR1_oldzoff: dc.l 0
  4931.  
  4932.  ds.w 4
  4933.  
  4934. PLR1s_cosval: dc.w 0
  4935. PLR1s_sinval: dc.w 0
  4936. PLR1s_angpos: dc.w 0
  4937. PLR1s_angspd: dc.w 0
  4938. PLR1s_xoff: dc.l 0
  4939. PLR1s_yoff: dc.l 0
  4940. PLR1s_yvel: dc.l 0
  4941. PLR1s_zoff: dc.l 0
  4942. PLR1s_tyoff: dc.l 0
  4943. PLR1s_xspdval: dc.l 0
  4944. PLR1s_zspdval: dc.l 0
  4945. PLR1s_Zone: dc.w 0
  4946. PLR1s_Roompt: dc.l 0
  4947. PLR1s_OldRoompt: dc.l 0
  4948. PLR1s_PointsToRotatePtr: dc.l 0
  4949. PLR1s_ListOfGraphRooms: dc.l 0
  4950. PLR1s_oldxoff: dc.l 0
  4951. PLR1s_oldzoff: dc.l 0
  4952.  
  4953.  ds.w 4
  4954.  
  4955. PLR2: dc.b $0
  4956.  even
  4957. PLR2_cosval: dc.w 0
  4958. PLR2_sinval: dc.w 0
  4959. PLR2_angpos: dc.w 0
  4960. PLR2_angspd: dc.w 0
  4961. PLR2_xoff: dc.l 0
  4962. PLR2_yoff: dc.l 0
  4963. PLR2_yvel: dc.l 0
  4964. PLR2_zoff: dc.l 0
  4965. PLR2_tyoff: dc.l 0
  4966. PLR2_xspdval: dc.l 0
  4967. PLR2_zspdval: dc.l 0
  4968. PLR2_Zone: dc.w 0
  4969. PLR2_Roompt: dc.l 0
  4970. PLR2_OldRoompt: dc.l 0
  4971. PLR2_PointsToRotatePtr: dc.l 0
  4972. PLR2_ListOfGraphRooms: dc.l 0
  4973. PLR2_ForwardSpd: dc.w 0
  4974.  
  4975. liftanimtab:
  4976.  
  4977. endliftanimtab:
  4978.  
  4979. glassball:
  4980. ; incbin "glassball.inc"
  4981. endglass
  4982. glassballpt: dc.l glassball
  4983.  
  4984. rndtab: ; incbin "randfile"
  4985. endrnd: 
  4986.  
  4987. brightanimtab:
  4988.  dcb.w 200,20
  4989.  dc.w 5
  4990.  dc.w 10,20
  4991.  dc.w 5
  4992.  dcb.w 30,20
  4993.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  4994.  dcb.w 40,0
  4995.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  4996.  dcb.w 300,0
  4997.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  4998.  dc.w -1
  4999.  
  5000. Roompt: dc.l 0
  5001. OldRoompt: dc.l 0
  5002.  
  5003. *****************************************************************
  5004.  *
  5005.  include "AB3:source/LevelData2"
  5006.  *
  5007. *****************************************************************
  5008.  
  5009.  
  5010. wallpt: dc.l 0
  5011. floorpt: dc.l 0
  5012.  
  5013. Rotated:
  5014.  ds.l 800 
  5015. ObjRotated:
  5016.  ds.l 800
  5017.  
  5018. OnScreen:
  5019.  ds.l 800 
  5020.  
  5021. startwait: dc.w 0
  5022. endwait: dc.w 0
  5023.  
  5024. Faces: incbin "faces2raw"
  5025.  
  5026. *******************************************************************
  5027.  
  5028. consttab:
  5029.  incbin "constantfile"
  5030.  
  5031. *******************************************************************
  5032.  
  5033. charmap: incbin "charmap"
  5034. font: incbin "stenfontraw"
  5035.  ds.b 5*48
  5036.  
  5037. darkentab: incbin "darkenedcols"
  5038. brightentab: incbin "brightenfile"
  5039. WorkSpace:
  5040.  ds.l 8192 
  5041. waterfile: incbin "waterfile"
  5042. RecordBuffer:
  5043. ED1:
  5044. ; Turning on stairs
  5045.  incbin "ab3:includes/EDIT1"
  5046.  even
  5047. ED2:
  5048. ; Fight with alien in room with key
  5049.  incbin "ab3:includes/EDIT9"
  5050.  even
  5051. ED3:
  5052. ; slide across #1
  5053.  incbin "ab3:includes/EDIT2"
  5054.  even
  5055. ED4:
  5056. ; slide across #2
  5057.  incbin "ab3:includes/EDIT3"
  5058.  even
  5059. ED5:
  5060. ; slide across #3
  5061.  incbin "ab3:includes/EDIT4"
  5062.  even
  5063. ED6:
  5064. ; fight with alien in water
  5065.  incbin "ab3:includes/EDIT5"
  5066.  even
  5067. ED7:
  5068. ; Walk into big room with aliens in
  5069.  incbin "ab3:includes/EDIT6"
  5070.  even
  5071. ED8:
  5072. ; In big room, go up lift
  5073.  incbin "ab3:includes/EDIT7"
  5074.  even
  5075. ED9:
  5076. ; Collect big gun, blow alien away
  5077.  incbin "ab3:includes/EDIT8"
  5078.  even
  5079. RecordPtr: dc.l RecordBuffer+6
  5080. StartRecordPtr: dc.l RecordBuffer 
  5081.  
  5082.  SECTION ffff,CODE_C
  5083.  
  5084. nullspr: dc.l 0
  5085.  
  5086.  cnop 0,8
  5087. borders:
  5088.  incbin "borderspr"
  5089.  
  5090. null: ds.w 500
  5091. null2: ds.w 500
  5092. null3: ds.w 500
  5093. null4: ds.w 500
  5094.  
  5095.  
  5096. Blurbfield:
  5097.  
  5098.  dc.w dmacon,$8020
  5099.  dc.w $1fc,$0
  5100.  dc.w intreq,$8011
  5101.  dc.w bpl1ptl
  5102. bl1l: dc.w 0
  5103.  dc.w bpl1pth
  5104. bl1h: dc.w 0
  5105.  
  5106.  dc.w diwstart,$2c81
  5107.  dc.w diwstop,$1cc1
  5108.  dc.w ddfstart,$3C
  5109.  dc.w ddfstop,$d4
  5110.  dc.w bplcon0,$0201
  5111.  dc.w bplcon1,0
  5112.  dc.w $106,$c40
  5113.  dc.w bplcon0,$9201
  5114.  dc.w $10c,$0
  5115. blcols:
  5116.  dc.w col0,0
  5117.  dc.w col1,$fff
  5118.  dc.w $106,$e40
  5119.  dc.w col0,0
  5120.  dc.w col1,$fff
  5121.  
  5122.  dc.w spr0ptl
  5123. bs0l:
  5124.  dc.w 0
  5125.  dc.w spr0pth
  5126. bs0h:
  5127.  dc.w 0
  5128.  dc.w spr1ptl
  5129. bs1l:
  5130.  dc.w 0
  5131.  dc.w spr1pth
  5132. bs1h:
  5133.  dc.w 0
  5134.  dc.w spr2ptl
  5135. bs2l:
  5136.  dc.w 0
  5137.  dc.w spr2pth
  5138. bs2h:
  5139.  dc.w 0
  5140.  dc.w spr3ptl
  5141. bs3l:
  5142.  dc.w 0
  5143.  dc.w spr3pth
  5144. bs3h:
  5145.  dc.w 0
  5146.  dc.w spr4ptl
  5147. bs4l:
  5148.  dc.w 0
  5149.  dc.w spr4pth
  5150. bs4h:
  5151.  dc.w 0
  5152.  dc.w spr5ptl
  5153. bs5l:
  5154.  dc.w 0
  5155.  dc.w spr5pth
  5156. bs5h:
  5157.  dc.w 0
  5158.  dc.w spr6ptl
  5159. bs6l:
  5160.  dc.w 0
  5161.  dc.w spr6pth
  5162. bs6h:
  5163.  dc.w 0
  5164.  dc.w spr7ptl
  5165. bs7l:
  5166.  dc.w 0
  5167.  dc.w spr7pth
  5168. bs7h:
  5169.  dc.w 0
  5170.  
  5171.  dc.w $108,0
  5172.  dc.w $10a,0
  5173.  
  5174.  dc.w $ffff,$fffe
  5175.  dc.w $ffff,$fffe
  5176.  
  5177. bigfield:    
  5178.                 ; Start of our copper list.
  5179.  
  5180.  dc.w dmacon,$8020
  5181.  dc.w intreq,$8011
  5182.  dc.w $1fc,$7
  5183.  dc.w diwstart
  5184. winstart: dc.w $2cb1
  5185.  dc.w diwstop
  5186. winstop: dc.w $2c91
  5187.  dc.w ddfstart
  5188. fetchstart: dc.w $48
  5189.  dc.w ddfstop
  5190. fetchstop: dc.w $88
  5191.  
  5192.  dc.w spr0ptl
  5193. s0l:
  5194.  dc.w 0
  5195.  dc.w spr0pth
  5196. s0h:
  5197.  dc.w 0
  5198.  dc.w spr1ptl
  5199. s1l:
  5200.  dc.w 0
  5201.  dc.w spr1pth
  5202. s1h:
  5203.  dc.w 0
  5204.  dc.w spr2ptl
  5205. s2l:
  5206.  dc.w 0
  5207.  dc.w spr2pth
  5208. s2h:
  5209.  dc.w 0
  5210.  dc.w spr3ptl
  5211. s3l:
  5212.  dc.w 0
  5213.  dc.w spr3pth
  5214. s3h:
  5215.  dc.w 0
  5216.  dc.w spr4ptl
  5217. s4l:
  5218.  dc.w 0
  5219.  dc.w spr4pth
  5220. s4h:
  5221.  dc.w 0
  5222.  dc.w spr5ptl
  5223. s5l:
  5224.  dc.w 0
  5225.  dc.w spr5pth
  5226. s5h:
  5227.  dc.w 0
  5228.  dc.w spr6ptl
  5229. s6l:
  5230.  dc.w 0
  5231.  dc.w spr6pth
  5232. s6h:
  5233.  dc.w 0
  5234.  dc.w spr7ptl
  5235. s7l:
  5236.  dc.w 0
  5237.  dc.w spr7pth
  5238. s7h:
  5239.  dc.w 0
  5240.  
  5241.  dc.w $106,$8c42
  5242.  dc.w col0,$0
  5243.  dc.w $106,$c42
  5244.  dc.w col0,0
  5245.  
  5246.  dc.w $106,$c42
  5247.  incbin "borderpal"
  5248.  
  5249.  dc.w bplcon0,$7201
  5250.  dc.w bplcon1
  5251. smoff:
  5252.  dc.w $0
  5253.  
  5254.  dc.w $108
  5255. modulo: dc.w -24
  5256.  dc.w $10a,-24
  5257.  
  5258.  dc.w bpl1pth
  5259. pl1h
  5260.  dc.w 0
  5261.  
  5262.  dc.w bpl1ptl
  5263. pl1l
  5264.  dc.w 0
  5265.  
  5266.  dc.w bpl2pth
  5267. pl2h
  5268.  dc.w 0
  5269.  
  5270.  dc.w bpl2ptl
  5271. pl2l
  5272.  dc.w 0
  5273.  
  5274.  dc.w bpl3pth
  5275. pl3h
  5276.  dc.w 0
  5277.  
  5278.  dc.w bpl3ptl
  5279. pl3l
  5280.  dc.w 0
  5281.  
  5282.  dc.w bpl4pth
  5283. pl4h
  5284.  dc.w 0
  5285.  
  5286.  dc.w bpl4ptl
  5287. pl4l
  5288.  dc.w 0
  5289.  
  5290.  dc.w bpl5pth
  5291. pl5h
  5292.  dc.w 0
  5293.  
  5294.  dc.w bpl5ptl
  5295. pl5l
  5296.  dc.w 0
  5297.  
  5298.  dc.w bpl6pth
  5299. pl6h
  5300.  dc.w 0
  5301.  
  5302.  dc.w bpl6ptl
  5303. pl6l
  5304.  dc.w 0
  5305.  
  5306.  dc.w bpl7pth
  5307. pl7h
  5308.  dc.w 0
  5309.  
  5310.  dc.w bpl7ptl
  5311. pl7l
  5312.  dc.w 0
  5313.  
  5314.  
  5315.  dc.w $1001,$ff00
  5316.  dc.w intreq,$11
  5317. yposcop:
  5318.  dc.w $2a11,$fffe
  5319.  dc.w $8a,0
  5320.  
  5321.  SECTION blank,BSS_C
  5322.  ds.l 104*10
  5323. colbars:
  5324. val SET $2a
  5325.  ds.l 104*scrheight
  5326. ededed:
  5327.  ds.l 2
  5328. ; dc.w $106,$c42
  5329.  
  5330. ; dc.w $80
  5331. ;pch1:
  5332. ; dc.w 0
  5333. ; dc.w $82
  5334. ;pcl1:
  5335. ; dc.w 0
  5336.  
  5337. ; dc.w $88,0
  5338. ; dc.w $ffff,$fffe
  5339.  ds.l 104*10
  5340.  
  5341. colbars2:
  5342. val SET $2a
  5343.  ds.l 104*scrheight
  5344. ededed2
  5345.  ds.l 2
  5346.  
  5347. ; dc.w $80
  5348. ;pch2:
  5349. ; dc.w 0
  5350. ; dc.w $82
  5351. ;pcl2:
  5352. ; dc.w 0
  5353.  
  5354. ; dc.w $88,0
  5355. ; dc.w $ffff,$fffe
  5356.  ds.l 104*10
  5357.  
  5358.  SECTION other,CODE_C
  5359.  
  5360. old: dc.l 0
  5361.  
  5362. PanelCop:
  5363.  
  5364.  dc.w bplcon0,1
  5365.  
  5366.  dc.w $106,$c42
  5367.  dc.w $10c,1
  5368.  dc.w $10e,0
  5369.  
  5370.  incbin "Panelcols"
  5371.  
  5372.  dc.w $108,0
  5373.  dc.w $10a,0
  5374.  
  5375.  dc.w bpl1pth
  5376. p1h
  5377.  dc.w 0
  5378.  
  5379.  dc.w bpl1ptl
  5380. p1l
  5381.  dc.w 0
  5382.  
  5383.  dc.w bpl2pth
  5384. p2h
  5385.  dc.w 0
  5386.  
  5387.  dc.w bpl2ptl
  5388. p2l
  5389.  dc.w 0
  5390.  
  5391.  dc.w bpl3pth
  5392. p3h
  5393.  dc.w 0
  5394.  
  5395.  dc.w bpl3ptl
  5396. p3l
  5397.  dc.w 0
  5398.  
  5399.  dc.w bpl4pth
  5400. p4h
  5401.  dc.w 0
  5402.  dc.w bpl4ptl
  5403. p4l
  5404.  dc.w 0
  5405.  dc.w bpl5pth
  5406. p5h
  5407.  dc.w 0
  5408.  dc.w bpl5ptl
  5409. p5l
  5410.  dc.w 0
  5411.  
  5412.  dc.w $80
  5413. och:
  5414.  dc.w 0
  5415.  dc.w $82
  5416. ocl:
  5417.  dc.w 0
  5418.  
  5419.  dc.w $106,$2c40
  5420.  incbin "borderpal"
  5421.  dc.w $10c,$3
  5422.  dc.w $106,$c40
  5423.  
  5424.  dc.w $cf01,$ff00
  5425.  dc.w bplcon0
  5426. Panelcon: dc.w $5201
  5427.  dc.w $180,$fff
  5428.  
  5429.  dc.w $f801,$ff00
  5430.  dc.w col1,$50
  5431.  dc.w $f901,$ff00
  5432.  dc.w col1,$90
  5433.  dc.w $fa01,$ff00
  5434.  dc.w col1,$f0
  5435.  dc.w $fb01,$ff00
  5436.  dc.w col1,$f0
  5437.  dc.w $fc01,$ff00
  5438.  dc.w col1,$90
  5439.  dc.w $fd01,$ff00
  5440.  dc.w col1,$50
  5441.  
  5442.  dc.w $fe01,$ff00
  5443.  dc.w col1,$fff
  5444.  
  5445.  dc.w $ffdf,$fffe
  5446.  dc.w $a01,$ff00
  5447.  dc.w bplcon0,$201
  5448.  
  5449.  incbin "faces2cols"
  5450.  dc.w bpl1pth
  5451. f1h
  5452.  dc.w 0
  5453.  
  5454.  dc.w bpl1ptl
  5455. f1l
  5456.  dc.w 0
  5457.  
  5458.  dc.w bpl2pth
  5459. f2h
  5460.  dc.w 0
  5461.  
  5462.  dc.w bpl2ptl
  5463. f2l
  5464.  dc.w 0
  5465.  
  5466.  dc.w bpl3pth
  5467. f3h
  5468.  dc.w 0
  5469.  
  5470.  dc.w bpl3ptl
  5471. f3l
  5472.  dc.w 0
  5473.  
  5474.  dc.w bpl4pth
  5475. f4h
  5476.  dc.w 0
  5477.  dc.w bpl4ptl
  5478. f4l
  5479.  dc.w 0
  5480.  
  5481.  dc.w bpl5pth
  5482. f5h
  5483.  dc.w 0
  5484.  dc.w bpl5ptl
  5485. f5l
  5486.  dc.w 0
  5487.  
  5488.  dc.w $0c01,$ff00
  5489.  dc.w bplcon0,$5201
  5490.   
  5491.  dc.w $ffff,$fffe
  5492.  
  5493.  cnop 0,64
  5494. FacePlace:
  5495.  ds.l 6*32*5
  5496.  
  5497.  
  5498. ********************************************
  5499. * Stuff you don't have to worry about yet. *
  5500. ********************************************
  5501.  
  5502. closeeverything:
  5503.  
  5504.  move.l #$dff000,a6
  5505.  move.l old,$dff080     ; Restore old copper list.
  5506.  move.l old,d0
  5507.  move.w d0,ocl
  5508.  swap d0
  5509.  move.w d0,och
  5510.  move.w #$8020,dmacon(a6)
  5511.  move.w #$f,dmacon(a6)
  5512.  move.l saveit,$6c.w
  5513.  move.l OLDKINT,$68.w
  5514.  move.w saveinters,d0
  5515.  or.w #$c000,d0
  5516.  move.w d0,intena(a6)
  5517.  clr.w $dff0a8
  5518.  clr.w $dff0b8
  5519.  clr.w $dff0c8
  5520.  clr.w $dff0d8
  5521.  
  5522. ; move.w #3,d0
  5523. ;nonewvbl
  5524. ; btst #5,intreqrl(a6)
  5525. ; beq.s nonewvbl
  5526. ; move.w #$20,intreq(a6)
  5527. ; dbra d0,nonewvbl
  5528.  
  5529. ; move.l oldview,a1
  5530. ; move.l a1,d0
  5531. ; move.l gfxbase,a6
  5532. ; jsr -$de(a6)
  5533.  
  5534.  move.l gfxbase,d0
  5535.  move.l d0,a1
  5536.  move.l 4.w,a6
  5537.  jsr CloseLib(a6)
  5538.  
  5539.  cmp.b #'t',option+1
  5540.  beq.s leaveold
  5541.  move.w #$f8e,$dff1dc
  5542. leaveold:
  5543.  
  5544.  rte
  5545.  
  5546. gfxbase: dc.l 0
  5547. oldview: dc.l 0
  5548.  
  5549. stuff:
  5550.  
  5551.     Lea    gfxname(pc),a1    
  5552.     Moveq.l    #0,d0
  5553.     Move.l    $4.w,a6    
  5554.     Jsr    -$228(a6)
  5555.     Move.l     d0,gfxbase
  5556.     Move.l    d0,a6                Use As Base Reg
  5557.     Move.l    34(a6),oldview
  5558.     move.l 38(a6),old
  5559.  
  5560.  jmp endstuff
  5561.  
  5562. gfxname dc.b "graphics.library",0
  5563.  
  5564.  even
  5565.  
  5566.  
  5567.  cnop 0,64
  5568.  
  5569. Panel:
  5570.  incbin "PanelRaw"
  5571.  
  5572. BlurbPic: incbin "blurbpic"
  5573.  
  5574. TimerScr: ds.b 40*64
  5575.  
  5576. scrntab:
  5577.  ds.b 16
  5578. val SET 32
  5579.  REPT 96
  5580.  dc.b val,val,val
  5581. val SET val+1
  5582.  ENDR
  5583.  ds.b 16
  5584.  
  5585.  cnop 0,64
  5586. scrn:
  5587.  
  5588.  dcb.l 8,$33333333
  5589.  dc.l 0
  5590.  dc.l 0
  5591.  
  5592.  dcb.l 8,$0f0f0f0f
  5593.  dc.l 0
  5594.  dc.l 0
  5595.  
  5596.  dcb.l 8,$00ff00ff
  5597.  dc.l 0
  5598.  dc.l 0
  5599.  
  5600.  dcb.l 8,$0000ffff
  5601.  dc.l 0
  5602.  dc.l 0
  5603.  
  5604.  dc.l 0,-1,0,-1,0,-1,0,-1
  5605.  dc.l 0
  5606.  dc.l 0
  5607.  
  5608.  dc.l -1,-1,0,0,-1,-1,0,0
  5609.  dc.l 0
  5610.  dc.l 0
  5611.  
  5612.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  5613.  dc.l 0
  5614.  dc.l 0
  5615.  
  5616. NumTimes: dc.l 0
  5617. TimeCount: dc.l 0
  5618. oldtime: dc.l 0
  5619. counting: dc.b 0
  5620. oktodisplay: dc.b 0
  5621.  
  5622. INITTIMER:
  5623.  move.l #0,TimeCount
  5624.  move.l #0,NumTimes
  5625.  rts
  5626.  
  5627. STARTCOUNT:
  5628.  move.l d0,-(a7)
  5629.  move.l $dff004,d0
  5630.  and.l #$1ffff,d0
  5631.  move.l d0,oldtime
  5632.  st counting
  5633.  move.l (a7)+,d0
  5634.  rts
  5635.  
  5636. STOPCOUNT:
  5637.  move.l d0,-(a7)
  5638.  move.l $dff004,d0
  5639.  and.l #$1ffff,d0
  5640.  
  5641.  sub.l oldtime,d0
  5642.  cmp.l #-256,d0
  5643.  bge.s okcount
  5644.  add.l #313*256,d0
  5645. okcount:
  5646.  add.l d0,TimeCount
  5647.  addq.l #1,NumTimes
  5648.  clr.b counting
  5649.  move.l (a7)+,d0
  5650.  rts
  5651.  
  5652. STOPCOUNTNOADD:
  5653.  move.l d0,-(a7)
  5654.  move.l $dff004,d0
  5655.  and.l #$1ffff,d0
  5656.  
  5657.  sub.l oldtime,d0
  5658.  cmp.l #-256,d0
  5659.  bge.s okcount2
  5660.  add.l #313*256,d0
  5661. okcount2:
  5662.  add.l d0,TimeCount
  5663.  clr.b counting
  5664.  move.l (a7)+,d0
  5665.  rts
  5666.  
  5667. maxbot: dc.w 0
  5668. tstneg: dc.l 0
  5669.  
  5670. STOPTIMER:
  5671.  st oktodisplay
  5672.  rts
  5673.  
  5674. digits:
  5675. ; incbin "numbers.inc"
  5676.  
  5677.  
  5678.  Section Sounds,CODE_C
  5679.  
  5680. Scream: incbin "ab3:sounds/Scream"
  5681.  ds.w 100
  5682. EndScream:
  5683. LowScream: incbin "ab3:sounds/LowScream"
  5684.  ds.w 100
  5685. EndLowScream:
  5686. BaddieGun:
  5687.  incbin "ab3:sounds/fire!"
  5688. EndBaddieGun:
  5689. bass: incbin "ab3:sounds/DRUMLOOP1"
  5690. bassend:
  5691. bass2: incbin "ab3:sounds/DRUMLOOP2"
  5692. bass2end:
  5693. bass3: incbin "ab3:sounds/DRUMLOOP3"
  5694. bass3end:
  5695. Shoot: incbin "ab3:sounds/fire!"
  5696. EndShoot:
  5697. Munch: incbin "ab3:sounds/munch"
  5698. EndMunch:
  5699. PooGun:
  5700.  incbin "ab3:sounds/BaddieGun"
  5701. EndPooGun:
  5702. Collect: incbin "ab3:sounds/collect"
  5703. EndCollect:
  5704. DoorNoise: incbin "ab3:sounds/door"
  5705. EndDoorNoise:
  5706. Stomp:
  5707. ; incbin "ab3:sounds/footstep3"
  5708. EndStomp:
  5709.